基本网络框架基于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系统写完会把代码和网络库的最新代码更新都会上传,希望大家多多指教。