您的位置:首页 > 理论基础 > 计算机网络

网络游戏服务器端网络引擎的研究与实现

2009-11-23 22:45 302 查看
冒险岛线程是在IOCP端口上执行的工作线程,它不断的调用 WindowsAPI函数
GetQueuecomPlctionstatus函数在IocP端口上进行查询,查询是否有完成的异步FO操
作。如果有完成的异步1/0操作,则对完成的异步1/0操作做出相应的处理。如果没有,
就继续等待。冒险岛线程是很繁忙的线程,它要在IOCP上不断的进行处理,那么系统需
3l网络游戏服务器端网络引擎的研究与实现
要启动多少个这样的线程呢?一般为了在性能上更优越,启动的线程数量为系统中处理
器的两倍。
冒险岛线程是由CNetserver类中的Worker下 [ireadProc函数来实现,图4.4给出的是
服务器线程的序列图。序列图中GetQueueComPletionstatus表示使用这个函数检查是否
有完成的重叠FO。Erro:表示有错误发生时的错误处理,AccePtComPleted表示接收操
作完成时的处理,ReadComPleted表示读操作完成时的处理,writeCorrtPleted表示写操
作完成时的处理。
冒险岛线程具体的实现步骤如下:
(1)冒险岛线程进入循环;不断调用GetQueuedComPletionstatus函数来检查是否有
完成的重叠FO操作。
(2)如果没有重叠操作完成,则等待。如果有重叠操作完成,检查套接字上是否
发生错误,如果有错误,进行相应的错误处理。如果没有错误,则进行相应的事件处理。
(3)如果是重叠的接收 (AccePtExFO)操作完成,说明有新的客广’连接了服务器,
为新连接申请客户上下文(CCI记niConiext)对象,并把这个新的连接关联到IOCP对象。
(4)如果是重叠的读操作完成,说明有数据到达,这时应该读取数据,读取的时
候要按照顺序进行,即按照句柄唯一数据结构中的nc叮eniReadSequen’e变量来顺序读
取。读取完成以后,将读取的数据通过NotifyReadComPleted接口函数通知上层,由上
层进行相应的处理。
(5)如果是重叠的写操作完成,说明数据成功发送给了客户端。)各发送的数据通
过NotifywritecomPleted接口函数告知上层,由上层进行相应的处理。
4.2.6虚函数接口
作为引擎的最底层,需要和上层进行数据交互,所以我们设计了一些虚函数接口,
通过虚函数接口来完成数据的交互,上层在实现时需要继承并重新实现这些虚函数接
口,在CNetserver类中有以下几个虚函数:
(l)virtualvoidNotifyConnectionEStslblished(CClientContext*PCont,从
cClientBu月飞r*pBufl飞r);该函数在连接建立时被调用,即客户端使用connect函数连接服
务器端时,如果连接可以建立,在服务器端调用该函数。上层实现类如果在连接建立时
需要进行数据处理,则需要重写该函数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: