因为不想去处理网络IO 所以偷懒直接使用了 libevent作为网络库。。(但是后果就是很多莫名其妙的bug无法明白。以后尝试替换
首先 每一个新连接 都会分配一个 SessionID 作为流水号增长。
相当于一个Client
然后统一放到一个Singlton的SessionManager里做统一处理 。使用map存储 SessionID作为key
每个Session都有一个接受数据缓存区。收到数据便往添加到缓存区尾部。然后尝试去parse一个包。
每个包包含
byte 字节序
int 全包长度 (包含字节序那1字节
short 客户端包序列
short 协议包类型
byte 协议版本
short 16位校验码
int 包数据长度
void* 包数据
其实每个包都带字节序有些多余。可以尝试在第一个包里确定。
解析后,将解析过的数据从缓存区中移除。
得到包后记录得到时间, 将包放到一个环形队列中,等待被执行。