zoukankan      html  css  js  c++  java
  • 服务器比较

    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
    {
        
    }
  • 相关阅读:
    Windows ETW 学习与使用三
    暗云Ⅳ对SATA磁盘MBR Hook探索
    msahci代码调试备份
    mimikatz使用命令记录
    Windows ETW 学习与使用一
    RabbitMQ 实现延迟队列
    Redis 脱坑指南
    浅析 ThreadLocal
    IDEA2020.2.3破解
    用友NC 模块 简写(瞎猜的)
  • 原文地址:https://www.cnblogs.com/zzyoucan/p/13837845.html
Copyright © 2011-2022 走看看