勤能补拙,Expter

成都游戏Coder,记录游戏开发过程的笔记和心得!

一个小型的IOCP网络库

        基本网络框架基于IOCP模型,这次主要在以前写的IPC通信的基础上修改,参考了当前项目网络库的设计思路。
      
         先介绍几个主要的类:
       1.CSocket重新套接字,CConnection继承CSocket表示一个连接对象主要重写Recv和Send接口,以及组包过程。
       2.CAccept处理客户端的链接,
       3.Cpacket一个消息数据包头,CMessage继承CPacket带数据消息包。
       4.CConnectManger保存一个连接CConnection的内存池对象,CAcceptManager一个接收客户端Accept的线程,CPacketManager参考了Loki的小对象管理做的一个缓冲区数据包内存池。
       5.CLibObject包含上面3个Manager(Singleton),CNetWork网络初始化。
       6.CIOCP类主要IO的线程类,接收处理所有的客户端连接CConnection。
       7.CServer类包括一个IOCP初始化和网络库管理类,IOCP会把接收到的数据重组成数据包后保存到CServer的一个CMsgQueue中.
       8.我们的重写一个Server只需要继承CServer,然后实现run和AccedeProcess即可。run从CMsgQueue缓冲区提取一个消息包,AccedeProcess处理消息。
      一些细节设计:
       1.为了节约带宽Connection这里采用了Negles算法,这里采用Negle的并没有马上把每一个需要发送MSG采用缓存队列的方式保存起来,而是每一个Connection自身都保存数据,CServer通过一个线程把每一个存在的Connection是否有消息缓存,然后发送。因而让IOCP只处理接收的消息,发送消息通过CServer来处理。

        出网络库基本框架如下:
          
 

网络库代码的代码http://code.google.com/p/tpgame/source/browse/#svn/trunk/GServerEngine/NetLibrary

问题肯定较多,希望多多指教。


最近一直在构思与写一套游戏AI系统,主要是通过状态机响应事件,更多是想运用自己学习到的一些优秀的算法,以及一些高级

的AI以此来锻炼对一些复杂的数据结构的编写和设计思维的提升。

算法和数据结构方面:
1.2D和3D寻路(主要包括2D寻路的初始化条件优化 ,3D的空间划分以及多叉树的划分,以及堆维护)。
2.带有更多思维的角色系统(附带更多的数据信息)判断。
3.查询线段树和树状数数组的运用。
4.一个线性的字符串过滤程序。
5.一个动态基于角色的最优二叉查找树的动态维护。(主要解决不同的角色AI触发频率建立一颗最优二叉查找树)
6.追踪算法以及游戏的群集算法都会整合到现在的AI系统中。

设计方面:
1.尽量让类之间耦合性更小,复杂度更低,浅显明确。

注:Ai系统写完会把代码和网络库的最新代码更新都会上传,希望大家多多指教。




posted on 2009-12-20 14:21 expter 阅读(3751) 评论(5)  编辑 收藏 引用 所属分类: 其他学习笔记工作笔记算法与数据结构Ai

评论

# re: 一个小型的IOCP网络库 2009-12-21 01:50 Fox

三更半夜的上来看一下,这两天被蹂躏安逸了……  回复  更多评论   

# re: 一个小型的IOCP网络库[未登录] 2009-12-23 12:44 true

友情支持  回复  更多评论   

# re: 一个小型的IOCP网络库 2009-12-23 22:15 矩阵操作

提供一个打包下载吧。不很想装SVN。。。。-_-~!  回复  更多评论   

# re: 一个小型的IOCP网络库 2010-10-07 16:02 favormm

我也是成都coder  回复  更多评论   

# re: 一个小型的IOCP网络库 2010-10-07 16:05 favormm

学习了。我也是成都的  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理