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

 冒险岛线程是在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函数连接服
务器端时,如果连接可以建立,在服务器端调用该函数。上层实现类如果在连接建立时
需要进行数据处理,则需要重写该函数。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值