游戏服务器处理多个连接入口的方案
最近在考虑为一组游戏服务器配置多个连接入口。这个需求来至于我们的国情。作为大的游戏运营商,势必要考虑国内的网络状况——南北不通的现状。以往别的公司的代理游戏,由于不是自己开发,都选择了一个实际的方案:在北网通和南电信各放若干组服务器。北边来的在北边玩,南方住的安居在南方。
我们的游戏却不行,因为我需要一个完整的大世界,必须解决南北互通的问题。据我所知国内运营的游戏 EVE 是比较好解决了这个问题的。
我们自己的游戏大多也解决了,只是宣传上还是鼓励玩家登陆相应的服务器。我们的解决方案本质上很简单。建立有多个出口的机房,同时拥有电信和网通的线路。或是用自己的线路互联电信和网通的机器。这后者普通用户自己在家也可以做,只要你肯花钱,同时购买电信的 ADSL 于网通的宽带即可。目前许多城市两者都向大众提供服务。
当然,最终我们还是需要编写服务器的程序员做一些配合。
早先,我的一组游戏服务器的设计是单台的连接服务器作为玩家的总入口,再汇集所有信息到心跳服务器,由它转发到后面的逻辑服务器组处理。关于这个设计以前写过篇 blog 。
其实稍微改动一下设计,就能很好的解决多个连接入口的问题。
只需要为每种网络配置独立的连接服务器,电信和网通各一台(或者还需要教育网),同时连入同一台心跳服务器。数据在心跳服务器汇总。数据包在汇集的时候,为了区分是哪个外部连接进来的,会被连接服务器编上内部 id 。当有多台连接服务器时,每台只需要配置不同的内部 id 掩码来区分就够了。
ps. 早先我们想用连接服务器配置双网卡的方式来解决这个问题。这几天反思这样成本过高。到时候要求每组服务器都有两条不同的网线接入,部线过于麻烦