页游手游服务器(一)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页游化
近些年,掌上游戏时代已经成为全民风尚,但身为游戏开发商考虑过手游安装包大小与用户转化率之间的关系吗? 随着手机游戏市场发展愈发壮大,行业发展愈加成熟,手游厂商愈来愈多,手游产业也进入了优胜劣汰的环节, ...
随机推荐
- Microsoft .Net Remoting
什么是Remoting,简而言之,我们可以将其看作是一种分布式处理方式.从微软的产品角度来看,可以说Remoting就是DCOM的一种升级,它改善了很多功能,并极好的融合到.Net平台下.Micros ...
- eclipse黄色警告(finally block does not complete normally) ,不建议在finally中使用return语句
在eclipse中编写例如以下的代码,eclipse会给出黄色告警:finally block does not complete normally. public class Test { publ ...
- SQLite使用事务
关键代码 SQLiteDatabase db = myDataHelper.getWritableDatabase(); // 开启事务 db.beginTransaction(); try{ db. ...
- hdu 4865 Peter's Hobby (隐马尔可夫模型 dp)
Peter's Hobby Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) To ...
- mybatis like写法
name like concat(concat('%',#{name}),'%') name like concat('%',#{name},'%')
- linux驱动current,引用当前进程,及task_struct(转)
尽管内核模块不象应用程序一样顺序执行, 内核做的大部分动作是代表一个特定进程的. 内核代码可以引用当前进程, 通过存取全局项 current, 它在 <asm/current.h> 中定义 ...
- js 获取浏览器显示内容的宽度和高度
js获取浏览器显示内容的宽度和高度 CreateTime--2017年7月10日17:24:12Author:Marydon 1.获取浏览器屏幕显示d的网页宽度 /** * 得到浏览器显示的屏幕高 ...
- 快速接入 Android BLE 开发的基础框架
代码地址如下:http://www.demodashi.com/demo/12092.html ** Android BLE基础操作框架,基于回调,操作简单.包含扫描.多连接.广播包解析.服务读写及通 ...
- Ubuntu14.04下MySQL的安装与卸载
转载自:https://www.2cto.com/os/201408/329502.html 安装MysQL 执行以下命令:sudo apt-get install mysql-server 2. 继 ...
- Hadoop 配置及hadoop HA 的配置
注:本文中提到的ochadoop 不要感到奇怪,是亚信公司内部自己合成的一个包.把全部的组件都放在一个包内了.免去了组件的下载过程和解决兼容问题.事实上也能够自己下载的.不要受到影响. 另,转载请注明 ...