天龙网络模型(通信机制)

                            天龙网络模型(通信机制)

 

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管理)。

猜你喜欢

转载自blog.csdn.net/qdslp/article/details/9150025