移动端网络游戏服务器架构

发表于2015-07-20
评论0 2.1k浏览

移动端网络游戏主要分为两种类型,一种是弱联网的,一种是强联网的。

弱联网的游戏,主要是指对游戏数据实时性要求比较低的联网游戏,比如卡牌游戏,休闲游戏等。

强联网的游戏,主要是指对游戏数据实时性要求比较高的联网游戏,比如MMORPG,ARPG等。

要求客户端与服务器之间进行实时通信。

在这里主要是跟大家讨论一下如何架设具有负载均衡的游戏服务器,对于游戏服务器开发,自然而然就会涉及到分区,跨服,并服等需求,针对这些需求我们该如何去架设服务器?

以下是我们服务器架设示意图,供大家参考:

首先我们先绘制出游戏服务器分布图:



我们可以看出,服务器之间的数据交换,该游戏服务器主要是由LoginServer,GateSever,GameServer,DBServer,CenterServer组成。

负载均衡主要是通过,GateServer完成的,就是说当玩家登陆的时候,GateServer会根据GameSever运行情况从里面找出一个相对空闲的GameServer分配给玩家。GateServer与GameServer之间是多对多的关系。换句话说就是GateServer当掉只会影响局部GameServer中玩家的人数,不影响全局。上图显示的只是软件的服务器架构,不是硬件的,意思是说,上面的布局可以在一台硬件服务器上配置完毕,也可以在多台服务器上配置,他们之间的配置是通过配置表完成的,样式如下:

     "CenterServer" :
        {
                "UUID" : 0,
                "Group" : 0,
                "ServerType" : "Single",
                "ListenPort" : 30000,
                "mysql" : "mysql://root:123456@192.168.1.16:3306/gamedata"
        },

        "LoginServer" :
        {
                "UUID" : 1,
                "Group" : 0,
                "ServerType" : "Single",
                "ListenAddr" : "192.168.1.16",
                "ListenPort" : 30100
        },

        "DatabaseServer" :
        {
                "UUID" : 2,
                "Group" : 0,
                "ServerType" : "Single",
                "ListenAddr" : "192.168.1.16",
                "ListenPort" : 30200,
                "mysql" : "mysql://root:123456@192.168.1.16:3306/gamedata"
        },

        "GateServer" :
        {
                "UUID" : 10,
                "Group" : 0,
                "ServerType" : "Multiple",
                "ListenAddr" : ["192.168.1.16"],
                "ListenPort" : [ 30300],
                "ServerProxy" :
                [
                        "GameServer"
        },

        "GameServer" :
        {
                "UUID" : 20,
                "Group" : 0,
                "ServerType" : "Multiple",
                "ListenAddr" : ["192.168.1.16"],
                "ListenPort" : [ 30400],
                "ServerProxy" :
                [
                        "DatabaseServer",
                        "BillServer"
        },


        "FightServer":
        {
                "UUID" : 80,
                "Group" : 0,
                "ServerType" : "Multiple",
                "ListenAddr" :[ "192.168.1.16"],
                "ListenPort" : [30700]
        }

以上是配置文件,通过这些文件就可以达到游戏的负载均衡。

数据的传递流程是这样的:

用户发送消息到LoginServer,LoginServer确认消息是否正确,如果正确就发送到CenterServer,来获取GateServer的ip地址和端口信息,接着说消息到达CenterServer后,CenterServer会选取负载最低的GateServer的ip地址和端口信息发给LoginServer,LoginServer发送给客户端,客户端接收到消息后链接GateServer,并发送消息到GateServer,GateServer把用户id保存起来并发送给CenterServer,然后通过GateServer分配用户到负载较小的GameServer、FightServer上面,并记录用户分派的服务器,将已登录用户收编发送消息给GateServer。然后GateServer会发消息给GameServer,GameServer会去DBServe查证,用户信息是否合法,整个流程就是这样子的。

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引