天龙八部服务器端---消息流程及游戏服内存管理


一、玩家登陆流程。

    先上流程图。

天龙八部服务器端---消息流程及游戏服内存管理_第1张图片

    简述: 以客户端请求登陆服务器为例(另客户端创建角色),登陆服请求数据库加载角色信息,发送至世界服务器转发给空闲逻辑服务器。逻辑服拿到角色信息首先初始化内存中玩家信息,后拷贝到共享内存区(跨进程,下面会解释内存的共享。)。--其中关联的天龙具体文件可参考上一篇(转载)。

二、举例邮件模块消息流程。

天龙八部服务器端---消息流程及游戏服内存管理_第2张图片

三、逻辑服务器GameServer的内存共享机制。

(以逻辑服进程与共享内存进程为例,只贴了部分关键代码)

    1、SharedMemory进程。

///共享内存进程的初始化函数
BOOL ShareMemory::Init( )
{
    bRet = NewStaticManager( ) ;
    //...
    bRet = InitStaticManager( ) ;
    //...
}
///分配池对象及管理器对象
BOOL ShareMemory::NewStaticManager( )
{
    g_pDBManager = new	ShareDBManager();//分配数据库管理器
    for(uint i =0;i< g_Config.m_ShareMemInfo.m_SMUObjCount;i++)
    {
        m_SMUPool[i].m_Data = g_Config.m_ShareMemInfo.m_pShareData[i];

	SHAREMEM_TYPE type = g_Config.m_ShareMemInfo.m_pShareData[i].m_Type;
	switch(type) 
	{
	    case ST_HUMAN_SMU:{//...}
            case ST_GUILD_SMU:{//...}
            case ST_MAIL_SMU:{//...}
            case ST_ITEMSERIAL_SMU:{//...}
        }
    }
}
///初始化池对象及管理器对象
BOOL ShareMemory::InitStaticManager( )
{
    bRet = g_pDBManager->Init();
    /*
    *根据分配的对象进行初始化
    */
    switch(type)
    {
        case ST_HUMAN_SMU:
        { bRet = pHumanSMUPool->Init(MAX_POOL_SIZE,key,SMPT_SHAREMEM,SHAREMEM_LOGFILE);
        }
        case ST_GUILD_SMU:{//...}
        case ST_MAIL_SMU:{//...}
        case ST_ITEMSERIAL_SMU:{//...}
    }
}

    2、server进程。

    server的初始化内存处理。

BOOL Server::InitStaticServer( )
{
    ret = g_HumanSMUPool.Init(MAX_POOL_SIZE,pCurrentSData->m_HumanSMKey,SMPT_SERVER,MAP_SERVER_SHAREMEM);
    ret = g_ItemSerialSMUPool.Init(1,pCurrentSData->m_ItemSerialKey,SMPT_SERVER,MAP_SERVER_SHAREMEM);
}

    以下是init函数对第三个参数(SMPT_SERVER/SMPT_SHAREMEM)的处理。

//尝试附加相应内存
ret = m_pRefObjPtr->Attach(key,sizeof(T)*nMaxCount+sizeof(SMHead));
if(SMPT == SMPT_SHAREMEM)        //共享内存进程
{
    ///失败,创建共享内存
    ret = m_pRefObjPtr->Create(key,sizeof(T)*nMaxCount+sizeof(SMHead));

}else                            //server进程
{
    if(!ret)
    {
        return FALSE;
    }
}

四、

    有错误及不足之处,会不断改进,弥补。



你可能感兴趣的:(天龙八部服务器端---消息流程及游戏服内存管理)