服务器比较

1.两个框架
mobile legends
{
        微服务架构:各系统耦合性低,rpc
        AccountServer        DirServer
                    LoginServer---c(账号认证,角色信息,区服信息)
                        |
                        |
        ConnServer    ConnServer ConnServer---c
        GameServer    GameServer GameServer---SharedMemory---MySql

        RankServer     FriendServer
        TeamServer    MatchServer --- BattleServer BattleServer
        PingServer    BroadServer --- BattleServer BattleServer
                    
        epoll线程(Server)(1-N)    ServiceHandleThread(1-N)
        epoll线程(Client)(1-N)    AsyncRspThread(1-N)
        
        附上一个配置,更好理解
         <mfw>
             <application>
                 setdivision = moba.zone.2006
                 <client>
                     locator                     = mfw.mfwregistry.QueryObj@tcp -h 192.168.40.220 -p 2000//注册服务器地址
                     refresh-endpoint-interval   = 60000
                     sync-invoke-timeout         = 3000
                     async-invoke-timeout        = 5000
                     connect-timeout             = 1000
                     asyncthread                 = 3
                 </client>
         
                 <server>
                     app      = MOBA
                     server   = GameServer
                     logpath  = ~/log
                     loglevel = DEBUG
                     framework-loglevel = INFO
                     log      = mfw.mfwlog.LogObj
                     loop-interval = 50
                     admin   = tcp -h 127.0.0.1 -p 0 -t 10000
                     agent-report = mfw.mfwagent.AgentReportObj@tcp -h 127.0.0.1 -p 2002 -t 3600000
         
                     <Service_1>
                         service    = MOBA.GameServer.GameServiceObj
                         endpoint   = tcp -h 192.168.40.210 -p 2024 -t 600000
                         protocol   = mfw
                         threads    = 1
                         maxconns   = 1024
                         queuecap   = 10240
                         queuetimeout = 5000
                     </Service_1>
                 </server>
             </application>
        </mfw>
}

300英雄
{
            整体性架构:耦合性高
            ShareMemProc:只申请共享内存
            LocalSaveServer读取共享内存发送到--->ManagerServer
            Client
             |
             |
            GateServer(多个)--->AuServer(账号验证)
             |
             |
             |
   GameDB---ManagerServer--->(GameAIServer,NameServer,CenterServer---GameDB)
             |
             |
             |
            GameServer(多个)---ShareMemProc----LocalSaveServer
    
    
    IOCP与epoll最大不同:IOCP时间通知时,已经做好了I/O,而epoll,还得自己去读写。
}


2.两个登录流程
mobile legends
{
    DirServer
    增加,修改-后台网页操作

    维护所有分区的当前信息        
    创建,修改,上报分区信息
    分区:状态,版本号,注册量等

    一.loginserver    
        定时从dir同步所有区服的信息
        1.CmdId_Login_Auth_CS->LoginServer
                    1_1:ip获得国家,然后根据渠道看是否禁止登陆
                    1_2:到accountserver获取账号信息,创建账号信息
                    1_3:推荐分区(最近登录的一个分区)
        2.CmdId_Login_GetZone_CS->LoginServer获取一个账号的相关角色信息(内网没有调用)
                    所有区服和角色的基本信息
        3.Cmd_Login_CheckUpgrade_CS
                    各种地址,包括connectserver的地址,cdn头像上传等
        4.CmdId_Login_GetBulletin_CS
                    获得游戏公告
        5.Cmd_Login_UpdateDeviceToken_CS(内网没有调用,可能在某些情况下调用)
                    上报devicetoken
        6.Cmd_Login_GetRegion_CS(内网没有调用)
                    各个大区的信息
                
    二.与connserver连接
        CmdId_Net_Connect_CS:连接connserer
        CmdId_Net_LogReport_CS:上报客户端日志
        CmdId_Role_Init_CS:获取角色详细信息
        CmdId_Net_Idle_CS:维护客户端连接心跳
        CmdId_Account_GetAccount_CS:获取账号相关信息

    三.与GameServer连接
        CmdId_Net_Connect_CS
        CmdId_Net_SetSkeyExpireTime_CS:ConnServer 通知 GameServer 过期时间
        CmdId_Role_Init_CS
        CmdId_Account_GetAccount_CS
        CmdId_Net_ServerTime_CS
    }

300英雄
{
    帐号验证
        gate -> client            MsgLoginDataWrapper(Sg2cSecretKey)
        client -> gate            MsgLoginDataWrapper(Sc2gReqClientLogin)                //登陆消息

        gate -> audbgate        Sg2aReqClientLogin                                    //验证服务器(通过登陆账号密码返回具体玩家账号信息)
        audbgate -> gate(Sa2gAckClientLogin) -> client(Sg2cAckClientLogin)            //返回具体玩家账号信息

        gate -> manager     MsgReqLoginCheck
        manager -> gate     MsgAckLoginCheck

        gate -> manager            DBMsgReqGetAllRoles                                    //获取所有角色信息
        manager -> db                Sm2dReqAllRoles
        db -> manager                Sd2mAckAllRoles
        manager -> gate            MsgResGetAllRoles
        gate -> client            MsgResGetAllRoles        1287  如果m_btRoleNum数量为0则进入创建流程,如果大于0则进入选角色登入流程
        
    登入流程
        client -> gate            MsgEnterWorld                    //获取角色信息
        gate -> manager            DBMsgReqGetOneRole
        manager -> db                Sm2dReqGetOneRole
        db -> manager                Sd2mAckGetOneRole
        
    1、Client-连接->GateServer  GateServer保存会话OnNewClientConnected
    2、Client-发送MSG_LOGINDATAWRAPPER->GateServer   登陆消息
    3、GateServer-登陆消息->AuAgent   验证服务器(通过登陆账号密码返回具体玩家账号信息)
    4、AuAgent-返回具体玩家账号信息->GateServer   GetAU().Run()-ProcessAUAgentProtocol-通知客户端验证-OnAckLogin-更新1会话
    5、ManagerServer-MSG_S2C_RESPONSEGETALLROLES->GateServer   ManagerServer发送人物信息给玩家,早期可能是GameServer发送的
    6、Client-MSG_ENTERWORLD->GateServer-MSG_GMD_REQUESTGETONEROLE->ManagerServer   获取角色信息
    7、ManagerServer-em2dReqGetOneRole->DB(CAccountManager) 向账号管理请求角色信息(DBServerConnector)
    8、DB->ed2mAckGetOneRole->ManagerServer DB返回数据至ManagerServer
    9、ManagerServer->MSG_DMG_RESPONSEGETONEROLE->GameServer ManagerServer将DB数据组装发给GameServer,GameServer更新玩家信息
    10、GameServer-MSG_ACKENTERWORLD->GateServer->Client 进入世界 清除临时登陆信息m_TempSessions、m_LoginSessions 建立以dwPlayerCharacterID为索引的会话m_GameChars
}

3.两个战斗流程
mobile legends
{
1.创建房间
CmdId_Room_Create_CS
    1_1到pingserver获取ping返回(格式:groupid:ping值)
    遍历这些battlegroup,检测battlegroup的版本(t_battle_group),在所有battle中找(t_battle_status)这个版本号和状态时正常的,确定本次匹配的matchid
CmdId_Room_Enter_CS(单人匹配不会调用)
    进入房间,根据模式,判断各种限制条件(段位,版本号等)
CmdId_Battle_StartMatch_CS
    从roomserver获取房间里面的玩家信息,开始匹配,根据玩家身上存储的matchid选择在哪个matchid进行匹配,会将房间里面的所有玩家信息带到match上
    发送CmdId_Match_StartMatch MatchServiceMsg到match上,battlegroup信息也带到match上
    根据带到match上的battlegroupu列表,筛选出可用的battlegroup列表(版本号,在线人数),然后同时在这些battlegroup里面匹配,扔到几人匹配的list里面
    loop每一帧从list匹配玩家,匹配成功后找到这个battlegroup里面的battle,加入到这个battle上面比赛,在一个battlegroup里面匹配成功了,则删除其他battlegroup里面匹配的该玩家
} 

300英雄
{
    ManagerServer->GameAIServer
    CELO_Super_Queue-CElo_Base_Queue-m_listNode:不同类型的战斗排队列表
    
    匹配成功
    GameAIServer->ManagerServer
    ManagerServer(m_quAthReady保存已就位的队伍信息)->GameServer
    
    GameServer开始创建副本,切线
}

4.玩家数据管理
mobile legends
{
    
}
原文地址:https://www.cnblogs.com/zzyoucan/p/13837845.html