页游手游服务器(一)c实现拓展lua网络
把工作几年服务器相关的部分内容,通过服务器解决方案,做一次总结。
整个实现的主体是lua脚本,lua实现主要缺少的两大块:
1网络部分
2数据库部分
这两部分必须通过c/c++做扩展
先来做net,主要是服务器net,和客户端net。
服务器发起连接的情况主要是用于和平台验证,上报之类的,还有服务间通信,接口如下:
_connect(ip, port, onconnect, onclose, timeout)
参数:
ip,地址
port 端口
onconnect 连接上的回调
onclose 关闭的回调
timeout 连接的客户端socket超时时间,超时会回调close
返回net对象
服务器net负责监听,收集客户端来的消息,接口如下:
_listen(ip, port, onconnect, onclose, timeout)
参数:
ip,地址
port 端口
onconnect 连接上的回调
onclose 关闭的回调
timeout 连接的客户端socket超时时间,超时会回调close
返回net对象
net对象方法:
net:receive(sep1,sep2,sep3,maxlen, onrec),设置接收条件
net:send(data)
net:close(),主动关闭连接
假定客户端和服务器的通信协议是:4字节表示长度len,后面len个字节表示真正的消息
服务器net典型使用方法
locla function onbody(net, data)
--data 是消息包,根据需要处理
net:receive(4, onhead)
end
local funciton onhead(net, data)
local len=string.from32(data)
--len是消息包的字节长度
net:receive(len, onbody)
end
local function onconnect(net, snet)
net:receive(4, onhead)
end
local function onclose(net, msg)
print("net closed", msg)
end
local snet=_listen("0.0.0.0", 80, onconnect, onclose, 60)
假定服务器给客户端发的消息包,协议如上
客户端典型使用如下:
locla function onbody(net, data)
--data 是消息包,根据需要处理
net:receive(4, onhead)
end
local function onconnect(net, snet)
net:receive(4, onhead)
end
local function onclose(net, msg)
print("net closed", msg)
end
local cnet=_connect("X.X.X.X", 8081, onconnect, onclose, 60)
net:send(#data)
net:send(data)
网络部分使用了libiop库,因为它的一些api不满足我的需求,稍作了修改,源码等哪天有空(等系列文章写完了再整理)整理下,测试通过了再上传。
net和sql都是给lua做拓展,精彩部分在lua,稍后
页游手游服务器(一)c实现拓展lua网络的更多相关文章
- 页游手游服务器(三)lua网络层
在(一)中,介绍了c对lua层的拓展,这边主要写lua层的网络部分,目标是实现RPC调用,实现主要是三部分: 1通信协议(消息的序列化和反序列化) rpc调用主要信息包括方法名,方法参数,设计的通信协 ...
- 页游手游服务器(五)sql缓存层
sql的通用缓存,是实现最麻烦的一部分,对于查询结果的缓存,主要有如下的结构来缓存: cache tablename--player statement--select * from player w ...
- 页游手游服务器(二)c支持mysql
上一篇说的是liua的net拓展,这一篇说lua的sql拓展,准确说是mysql拓展,这里推荐下postgre,比mysql好用,支持数组,各种好,不过腾讯平台不支持,所以你的公司要和腾讯合作,掂量下 ...
- Unity3D手游开发实践
<腾讯桌球:客户端总结> 本次分享总结,起源于腾讯桌球项目,但是不仅仅限于项目本身.虽然基于Unity3D,很多东西同样适用于Cocos.本文从以下10大点进行阐述: 架构设计 原生插件/ ...
- (转)Unity3D手游开发实践
作者:吴秦出处:http://www.cnblogs.com/skynet/本文基于署名 2.5 中国大陆许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名吴秦(包含链接). (转)& ...
- distri.lua重写开源手游服务器框架Survive
Survive之前采用的是C+lua的设计方式,其中网关服务器全部由C编写,其余服务全部是C框架运行lua回调函数的方式编写游戏逻辑. 鉴于一般的手游对服务器端的压力不会太大,便将Survive用di ...
- SLG手游Java服务器的设计与开发——架构分析
微信公众号[程序员江湖] 作者黄小斜,斜杠青年,某985硕士,阿里 Java 研发工程师,于 2018 年秋招拿到 BAT 头条.网易.滴滴等 8 个大厂 offer,目前致力于分享这几年的学习经验. ...
- SLG手游Java服务器的设计与开发——数据管理
文章版权归腾讯GAD所有,禁止匿名转载:禁止商业使用:禁止个人使用. 一.前言 上文介绍了我们的SLG手游的服务器架构设计以及网络通信部分,本文介绍数据管理部分,在数据存储方面,我选择了Mysql.M ...
- 手游包压缩技术引领手游行业实现app页游化
近些年,掌上游戏时代已经成为全民风尚,但身为游戏开发商考虑过手游安装包大小与用户转化率之间的关系吗? 随着手机游戏市场发展愈发壮大,行业发展愈加成熟,手游厂商愈来愈多,手游产业也进入了优胜劣汰的环节, ...
随机推荐
- Yum编译安装Error Downloading Packages报错
1:执行yum clean all 清除缓存目录下的软件包及旧的headers: 2:接着执行 yum list重新列出所有已经安装和可以安装的软件包: 3:重新执行上述命令,发现yum编译成功: 注 ...
- 数据库中存在0,1,2.....或者1,null,2 排序时让0或者null在最后的sql语句
select * from yryz_products_t order by isnull(sort),sort; select * from yourtable order by cast ...
- Json,String,Map之间的转换
前提是String的格式是map或json类型的 String 转Json JSONObject jasonObject = JSONObject.fromObject(str); String 转 ...
- Angular 学习笔记——ng-animate
<!DOCTYPE HTML> <html ng-app="myApp"> <head> <meta http-equiv="C ...
- ubuntu18.04 安装mysql时'root'@'localhost'无法获取登录权限
查看一下user表,错误的起因就是在这里, root的plugin被修改成了auth_socket,用密码登陆的plugin应该是mysql_native_password mysql> sel ...
- iOS开发--Mac下server搭建
前言 对于Mac电脑的认识.我一直停留在装B神器的意识上.就在前两天我彻底改变了庸俗的看法,当时忙着写毕业设计.苦于iOS开发没有server, 数据都是从网上抓取或本地plist文件,感觉不够高大上 ...
- 输出C语言中 变量的类型
使用gcc的警告信息间接知道变量的类型 #include <stdio.h> #include <stdlib.h> #include <stddef.h> #in ...
- h5+ 管理设备信息
Device模块管理设备信息,用于获取手机设备的相关信息,如IMEI.IMSI.型号.厂商等.通过plus.device获取设备信息管理对象. 1.属性 1.1.imei: 设备的国际移动设备身份码, ...
- Spring MVC 学习笔记 spring mvc Schema-based configuration
Spring mvc 目前支持5个tag,分别是 mvc:annotation-driven,mvc:interceptors,mvc:view-controller, mvc:resources和m ...
- 基于Android Classic Bluetooth的蓝牙聊天软件
代码地址如下:http://www.demodashi.com/demo/12133.html BluetoothChat 基于Android Classic Bluetooth的蓝牙聊天软件,目前仅 ...