网络游戏服务器端网络引擎的研究与实现
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函数连接服
务器端时,如果连接可以建立,在服务器端调用该函数。上层实现类如果在连接建立时
需要进行数据处理,则需要重写该函数。
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函数连接服
务器端时,如果连接可以建立,在服务器端调用该函数。上层实现类如果在连接建立时
需要进行数据处理,则需要重写该函数。
相关文章推荐
- 移动网络游戏实现流程 -- 基于Cocos2d-x引擎和pomelo服务器框架
- libgdx游戏引擎教程(五)多游戏界面的实现(一)附源码
- 基于ACE设计一个c++网络游戏服务器框架引擎
- 利用函数计算实现网络游戏或视频直播中的敏感词检测
- 网络游戏剧情副本的一种实现方式(中)
- 用C++实现跨平台游戏开发之Irrlicht引擎
- 265行代码实现第一人称游戏引擎
- 探讨DNS-ALG在IPV4和IPV6互通网络中的研究与实现
- 用C++实现跨平台游戏开发之Allegro引擎
- 「游戏引擎Mojoc」(6)NDK替换android_native_app_glue的实现
- 游戏引擎理论与实现系列03-生成图像
- Android网络编程之一个Android下菜单系统模块的实现(服务器端—结算功能(上部))
- Unity5.1 新的网络引擎UNET(七) UNET 单人游戏转换为多人
- Android网络编程之一个Android下菜单系统模块的实现(服务器端—更新桌号)
- Android网络编程之一个Android下菜单系统模块的实现(服务器端—更新菜单)
- 游戏引擎/GUI的设计与实现-序
- 用C++实现跨平台游戏开发之Allegro引擎
- Unity3D 游戏引擎之实现平面多点触摸(二)
- 「游戏引擎Mojoc」(9)C使用二分查找实现泛型字典映射
- J2me网络编程以及网络游戏的实现