1)服务器TCP数据包通讯全流程
(1)协议: 编解码
(2)客户端发送数据
ProtoGen--》生成后自动拷贝
pb版本2
stype
ctype
几个服务,就有几个代理。
2: 服务号
2: 命令号
4: 用户标识(保留)
protobuf: 数据协议体(head的长度+数据的长度)
2:包体大小
真正的二进制数据
(3)服务器接收数据
继承自Message自己写的
@MessageMeta注解
服务器号:module。 投递到特定的服务器上,如Auth。 投递到登陆服务器上
命令号: cmd,如:处理登陆服务器上的什么功能。
MessageFactory: 扫描,然后注册消息。
Message和继承自Message类的扫描出来。
读取@MessageMeta注解。
module*1000 + cmd: 组合成为一个整数。
做好映射,放到HashMap中(类--》key和key--》类 的双向映射)。
Decoder和Encoder--》解析得到Message对象
派送给对应的Controller:
Controller +
每个module对应一个Controller, 然后读取方法上的参数,依次对比,如果得到了ReqXXX,则记录下来映射,这样请求过来,
就会回调Controller中的处理函数。
如果有@RequestMapping注解,就认为是处理某个请求命令的。
遍历所有参数的类型,如果参数类型是一个Message,则从这个类型上,找到注解类。
[module, cmd]-->Controller/Method对应起来。
NettySession-->IdSession
(4)服务器返回数据
(5)客户端NetMgr接收到数据
来源:oschina
链接:https://my.oschina.net/u/4375917/blog/4657348