天龙网络模型(通信机制)
1、通信机制
(1)程序中Player类定义为一个网络连接,每个player类包含一个Socket(指针),服务器端侦听客户端接入,客户端用于连接服务器。
(2)每个player中包含一个InputBuff和一个OutPutBuff,往某个连接发送消息时,先写入到OutPutBuff中,在每个心跳中,再把OutPutBuff中的数据一起发送出去。
(3)PlayerManager类用于管理一类相同Player的集合,并运行在一个独立的线程中。
(4)程序中各功能系统大多采用数据与逻辑分开的模式,XXXPool预先申请固定数量的数据,XXXManager处理相关功能逻辑,在Manager中通过下标指向相应的PoolData。线程回调XXXManager::DoTick()函数,来处理相关逻辑。
BOOL XXXManager::DoTick(UINT uTime)
{
//网络处理
{
ret = XXXPlayerManager->Select( ) ;
Assert( ret ) ;
ret = XXXPlayerManager->ProcessExceptions( ) ;
Assert( ret ) ;
ret = XXXPlayerManager->ProcessInputs( ) ; //把数据接收到InputBuff
Assert( ret ) ;
ret = XXXPlayerManager->ProcessOutputs( ) ; //OutPutBuff数据发出去
Assert( ret ) ;
}
//消息处理
{
ret = XXXPlayerManager->ProcessCommands( ) ;
Assert( ret ) ;
}
//缓存消息处理
{
ProcessCacheCommands( ) ;
}
//逻辑处理
{
ret = XXXPlayerManager->HeartBeat(uTime);
}
return TRUE ;
}
2、网络模型
以LoginServer为例:
(1) PacketFactoryManager以工厂模式管理所有消息包,每个Player(网络连接)接收完消息后,解析InputBuff中的数据,生成消息包结构,然后调用相应Packet类的Excute函数处理消息。
(2) LoginServer分别与Billing、World、Client连接,所以,会有三类网络连接,分别对应以上三个程序(与Client的连接会有多个网络连接,组成一个连接池,由LoginPlayerManager管理)。