把工作几年服务器相关的部分内容,通过服务器解决方案,做一次总结。
整个实现的主体是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网络的更多相关文章

  1. 页游手游服务器(三)lua网络层

    在(一)中,介绍了c对lua层的拓展,这边主要写lua层的网络部分,目标是实现RPC调用,实现主要是三部分: 1通信协议(消息的序列化和反序列化) rpc调用主要信息包括方法名,方法参数,设计的通信协 ...

  2. 页游手游服务器(五)sql缓存层

    sql的通用缓存,是实现最麻烦的一部分,对于查询结果的缓存,主要有如下的结构来缓存: cache tablename--player statement--select * from player w ...

  3. 页游手游服务器(二)c支持mysql

    上一篇说的是liua的net拓展,这一篇说lua的sql拓展,准确说是mysql拓展,这里推荐下postgre,比mysql好用,支持数组,各种好,不过腾讯平台不支持,所以你的公司要和腾讯合作,掂量下 ...

  4. Unity3D手游开发实践

    <腾讯桌球:客户端总结> 本次分享总结,起源于腾讯桌球项目,但是不仅仅限于项目本身.虽然基于Unity3D,很多东西同样适用于Cocos.本文从以下10大点进行阐述: 架构设计 原生插件/ ...

  5. (转)Unity3D手游开发实践

    作者:吴秦出处:http://www.cnblogs.com/skynet/本文基于署名 2.5 中国大陆许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名吴秦(包含链接). (转)& ...

  6. distri.lua重写开源手游服务器框架Survive

    Survive之前采用的是C+lua的设计方式,其中网关服务器全部由C编写,其余服务全部是C框架运行lua回调函数的方式编写游戏逻辑. 鉴于一般的手游对服务器端的压力不会太大,便将Survive用di ...

  7. SLG手游Java服务器的设计与开发——架构分析

    微信公众号[程序员江湖] 作者黄小斜,斜杠青年,某985硕士,阿里 Java 研发工程师,于 2018 年秋招拿到 BAT 头条.网易.滴滴等 8 个大厂 offer,目前致力于分享这几年的学习经验. ...

  8. SLG手游Java服务器的设计与开发——数据管理

    文章版权归腾讯GAD所有,禁止匿名转载:禁止商业使用:禁止个人使用. 一.前言 上文介绍了我们的SLG手游的服务器架构设计以及网络通信部分,本文介绍数据管理部分,在数据存储方面,我选择了Mysql.M ...

  9. 手游包压缩技术引领手游行业实现app页游化

    近些年,掌上游戏时代已经成为全民风尚,但身为游戏开发商考虑过手游安装包大小与用户转化率之间的关系吗? 随着手机游戏市场发展愈发壮大,行业发展愈加成熟,手游厂商愈来愈多,手游产业也进入了优胜劣汰的环节, ...

随机推荐

  1. 你今天Restful了吗?

    大家都宣称自己已经满足REST架构的风格, 那到底需要怎么去评价是否符合REST架构, 至少得有以下几个特征. REST 的约束包括: 无状态.在不同的客户端请求之间,服务器并不保存客户端相关的上下文 ...

  2. Maven够用就好

    学习maven.仅仅要知道pom.dependency.coordination就能够了,剩下的就是学习一个一个的plugin的Goal 配置maven 下载    http://maven.apac ...

  3. android项目 之 记事本(13) ----- 查看图片及播放录音

    本文是自己学习所做笔记,欢迎转载.但请注明出处:http://blog.csdn.net/jesson20121020 今天就来实现下查看图片及录音的功能,在编辑或者浏览记事时,点击图片.打开一个自己 ...

  4. MySQL5.7 基于二进制包的安装

    1.MySQL5.7安装注意事项 1.在MySQL5.7中mysql_install_db已经不再推荐使用,建议改成mysqld-initialize 完成实力初始化.(mysql_install_d ...

  5. quick-cocos2d-x教程9:实例之加上背景图片

    在梳理完quick-cocos2d-x框架的各个文件夹后,我们開始我们的实例教程,在helloworld后面.加上一张图片,lua编辑器,我用的lua editor.还不错. 我们首先还是參照教程.创 ...

  6. C语言结构体及函数传递数组參数演示样例

    注:makeSphere()函数返回Sphere结构体,main函数中.调用makeSphere()函数,传递的第一个參数为数组,传递的数组作为指针.

  7. 【BIEE】10_资料库查看数据报错

    导入元数据后,在资料库右键物理表名,[查看数据]报错: 出现这个问题,没搞明白是为啥- 后来百度意外发现一个方法,修改NQSConfig.INI文件即可解决问题 那么就开始来搞定这个问题 [1]打开路 ...

  8. 优化MyDb

    import pymysqlclass MyDb(object): #新式类 def __del__(self):#析构函数 self.cur.close() self.coon.close() pr ...

  9. 读EXCEL

    import xlrdbook=xlrd.open_workbook('app_student.xls')sheet=book.sheet_by_index(0)#根据(索引)顺序获取到sheet页# ...

  10. leetcode isPalindrome (回文数判断)

    回文很简单,就是正着读和反着读一样,要判断一个数是否为回文数只需要判断正反两个是不是相等即可. 再往深了想一下,只需要判断从中间分开的两个数一个正读,一个反读相等即可. 代码: class Solut ...