-
Notifications
You must be signed in to change notification settings - Fork 21
CmdPackage包传输协议
zerlenzhang edited this page Mar 5, 2020
·
1 revision
这套框架中,在传输协议(tcp,udp,websocket)之上,还有一层协议就是框架自己维护的CmdPackage包传输协议,所有的消息都被封装成CmdPackage在进行发送和接收
CmdPackage { short,short,int,char*}
在lua中意义为{serviceType,cmdType,userTag,body}
- serviceType:服务号,网关根据服务号将收到的消息转发给对应的服务器
- cmdType:命令号,某一项服务的具体命令
- userTag:供用户自定义使用,可以自由写入和读取,一般用于服务器内部标识
- body:消息主体,本框架支持protobuf和json
- RawPackage是对CmdPackage的一个简单封装,只多了一个int字段记录body长度,底层也是把RawPackage当作CmdPackage来处理的
- 使用 Session.SendRawPackage(session,rawpackage) 发送的包,接收CmdPackage的一方也可以收到,反之,使用Session.SendPackage(cmdPackage)发送的包,接收RawPackage的一方也可以收到,因为底层做了简单转化后在调用的Lua回调函数【这并不消耗性能】
- RawPackage存在的意义是为了网关:网关有时需要也只需要知道包体的包头信息,但常规解析CmdPackage包会解析body,费事而无用,于是设计RawPackage供网关使用
-
读取rawPackage包头信息(只解析前八位)
-
args:
- rawPackage:RawPackage
serviceType,cmdType,utag = RawCmd.ReadHeader(rawpackage);//消耗很少,只读取前几个字节
- 解析读取rawPackage的body部分,并转化为lua表
- args:
- rawPackage:RawPackage
body=RawCmd.ReadBody(rawpackage); //这会把body解析出来,消耗大小视包体大小而异
- rawPackage:RawPackage
-
设置包体中的utag
-
args:
- rawPackage:RawPackage
- value : int
RawCmd.SetUTag(rawpackage,value);