设计:
网络层包含一个连接队列,每个连接类负责读写缓冲;应用层包含一个玩家队列,不用负责底层的读写缓冲。
http://blog.csdn.net/sodme/article/details/85304
好了,具体说下网络层的连接管理吧。
接口:
uint32 newConn();
void deleteConn(uint32 index);
conn* getConn(uint32 index);
总的内存分配是一个大数组,每个数组包含一个conn结构体。 通过在这个数组上检索空白槽来获得一个新连接,连接结构体对外的是索引值方式,而不是指针方式,是为了杜绝野指针。
可以增加一个freelist, 来保存deleteConn之后的空闲连接,提高检索速度。
conn.rar
一般而言,每个连接都有唯一的一个socket值,用此socket可以用来唯一识别一个连接,linux下常用做法就是定义一个大数组,以socket作为数组下标,来存放所有连接;但是这是基于linux的文件描述符分配是从最小开始分配的,所以windows下的话,一般用map
我这里统一用一个大数组,数组下标不是socket值,来统一跨平台。
conn.rar
阅读(594) | 评论(0) | 转发(0) |