网络游戏服务器架构2

在《网络游戏服务器架构》这篇文章中,我描述了我们游戏中的服务器基本结构。游戏中4大服务器session, gateway, dbx, world,它们之间通过sock进行通信。四大服务器的连接过程是这样的:

1.先启动dbx,dbx监听端口3000,供其他服务器连接

2.接下来是session,它连接dbx(3000),同时监听2300,供gateway连接,并且监听2500,供world连接

3.然后是gateway,它连接session(2300),监听2200,供world连接,同时监听2100,供client连接

4.最后是world,它连接以上所有服务器,dbx(3000),session(2500),gateway(2200)


以下是连接关系图示,A->B表示A主动连B。(图片是手稿,在手机里,晚上再传0.0)

4个服务器进程启动后,除了world木有跟gateway主动连接上以外(这个需要session在玩家登录时进行gateway的分配),其他需要连接的都已连接。

知道了连接关系以后,我们再来说下登录过程,大概是这样的:

1.选区。其实是选择session的过程(好吧,代码中是这样写的,其实我更想说的是选db的过程。因为游戏中只有一个session,还谈什么选择),每个区都有一组服务器,他们公用一个数据库。点击后进入账号输入登录界面。

2.账号验证。输入账号密码,点击进入游戏。session会通过dbx去数据库中查找账号密码是否正确,如果ok,返回服务器列表及各服务器人数情况(红色:爆满;绿色:少量玩家)。这就进入到world服务器选择界面。

3.选择world服务器 + 选择/创建角色。选择world服务器,点击进入游戏。session根据选择的world服务器ID,来分配gateway(gatewayID = wordID/2,相当于1个world对应两个gateway),同时产生校验码,最后发送gateway信息及校验码到client,发送验证码到gateway。client会去连接gateway,并在gateway中对校验码进行验证。验证成功后,gateway通知world加载角色及场景信息。最后,我们断开client跟session的连接。至此,我们完成了登录,进入到游戏中。

另外,有必要说下gateway与world的关系。没此有world去连接session的时候,session就会把所有gateway的信息(gatewayList)发送给world,world就会去连接所有的gateway,当然这时也会顺便在client中更新下服务器列表;而当有gateway去连接session的时候,session会更新gatewayList,并通知所有的world更新getewayList信息,同时去连接这个新添加的gateway。所有我们说,所有gateway跟所有world都有连接,恩,就是这样。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值