服务器结构探讨 -- 继续世界服

原创 2007年09月11日 22:22:00

  都已经看出来了,这种每切换一次地图就要重新连接服务器的方式实在是不够优雅,而且在实际游戏运营中也发现,地图切换导致的卡号,复制装备等问题非常多,这里完全就是一个事故多发地段,如何避免这种频繁的连接操作呢?

  最直接的方法就是把那个图倒转过来就行了。客户端只需要连接到中心服上,所有到地图服务器的数据都由中心服来转发。很完美的解决方案,不是吗?

  这种结构在实际的部署中也遇到了一些挑战。对于一般的MMORPG服务器来说,单台服务器的承载量平均在2000左右,如果你的服务器很不幸地只能带1000人,没关系,不少游戏都是如此;如果你的服务器上跑了3000多玩家依然比较流畅,那你可以自豪地告诉你的策划,多设计些大量消耗服务器资料的玩法吧,比如大型国战、公会战争等。

  2000人,似乎我们的策划朋友们不大愿意接受这个数字。我们将地图服务器分开来原来也是想将负载分开,以多带些客户端,现在要所有的连接都从中心服上转发,那连接数又遇到单台服务器的可最大承载量的瓶颈了。

  这里有必要再解释下这个数字。我知道,有人一定会说,才带2000人,那是你水平不行,我随便写个TCP服务器都可带个五六千连接。问题恰恰在于你是随便写的,而MMORPG的服务器是复杂设计的。如果一个演示socket API用的echo服务器就能满足MMOG服务器的需求,那写服务器该是件多么惬意的事啊。

  但我们所遇到的事实是,服务器收到一个移动包后,要向周围所有人广播,而不是echo服务器那样简单的回应;服务器在收到一个连接断开通知时要向很多人通知玩家退出事件,并将该玩家的资料写入数据库,而不是echo服务器那样什么都不需要做;服务器在收到一个物品使用请求包后要做一系列的逻辑判断以检查玩家有没有作弊;服务器上还启动着很多定时器用来更新游戏世界的各种状态......

  其实这么一比较,我们也看出资料消耗的所在了:服务器上大量的复杂的逻辑处理。再回过头来看看我们想要实现的结构,我们既想要有一个唯一的入口,使得客户端不用频繁改变连接,又希望这个唯一入口的负载不会太大,以致于接受不了多少连接。

  仔细看一看这个需求,我们想要的仅仅只是一台管理连接的服务器,并不打算让他承担太多的游戏逻辑。既然如此,那五六千个连接也还有满足我们的要求。至少在现在来说,一个游戏世界内,也就是一组服务器内同时有五六千个在线的玩家还是件让人很兴奋的事。事实上,在大多数游戏的大部分时间里,这个数字也是很让人眼红的。

  什么?你说梦幻、魔兽还有史先生的那个什么征途远不止这么点人了!噢,我说的是大多数,是大多数,不包括那些明显。你知道大陆现在有多少游戏在运营吗?或许你又该说,我们不该在一开始就把自己的目标定的太低!好吧,我们还是先不谈这个。

  继续我们的结构讨论。一般来说,我们把这台负责连接管理的服务器称为网关服务器,因为内部的数据都要通过这个网关才能出去,不过从这台服务器提供的功能来看,称其为反向代理服务器可能更合适。我们也不在这个名字上纠缠了,就按大家通用的叫法,还是称他为网关服务器吧。

  网关之后的结构我们依然可以采用之前描述的方案,只是,似乎并没有必要为每一个地图都开一个独立的监听端口了。我们可以试着对地图进行一些划分,由一个Master Server来管理一些更小的Zone Server,玩家通过网关连接到Master Server上,而实际与地图有关的逻辑是分派给更小的Zone Server去处理。

  最后的结构看起来大概是这样的:

        Zone Server        Zone Server
                /                    /
                 /                  /
                Master Server               Master Server
                    /                 /                   /
                   /                    /                 /
        Gateway Server        /               /
            |                    /         /             /
            |                      /         /           /
            |                      Center Server
            |
            |
           Client 

服务器结构探讨(4) -- 继续世界服

都已经看出来了,这种每切换一次地图就要重新连接服务器的方式实在是不够优雅,而且在实际游戏运营中也发现,地图切换导致的卡号,复制装备等问题非常多,这里完全就是一个事故多发地段,如何避免这种频繁的连接操作...
  • limiko
  • limiko
  • 2011年10月09日 12:19
  • 493

Mangos源码分析(4):服务器结构探讨之继续世界服

都已经看出来了,这种每切换一次地图就要重新连接服务器的方式实在是不够优雅,而且在实际游戏运营中也发现,地图切换导致的卡号,复制装备等问题非常多,这里完全就是一个事故多发地段,如何避免这种频繁的连接操作...
  • u011686361
  • u011686361
  • 2015年09月10日 12:00
  • 353

Ubuntu下搭建我的世界服务器

总结一下在Linux下搭建我的世界服务器的方法,其实非常简单直接。 (1)、把当前的软件都更新到最新sudo apt-get updateMinecraft服务器需要java支持。为了检查我们是否已...
  • CSDNzyq
  • CSDNzyq
  • 2016年10月04日 19:48
  • 2244

全球同服 游戏服务器架构设计

著作权归作者所有。 商业转载请联系作者获得授权,非商业转载请注明出处。 作者:马剑飞 链接:https://www.zhihu.com/question/31103751/answer/6463...
  • w174504744
  • w174504744
  • 2016年01月22日 11:46
  • 6112

服务器结构探讨(3) -- 简单的世界服实现

讨论了这么久我们一直都还没有进入游戏世界服务器内部,现在就让我们来窥探一下里面的结构吧。   对于现在大多数MMORPG来说,游戏服务器要处理的基本逻辑有移动、聊天、技能、物品、任务和生...
  • limiko
  • limiko
  • 2011年10月09日 12:04
  • 451

服务器结构探讨 -- 简单的世界服实现

  讨论了这么久我们一直都还没有进入游戏世界服务器内部,现在就让我们来窥探一下里面的结构吧。  对于现在大多数MMORPG来说,游戏服务器要处理的基本逻辑有移动、聊天、技能、物品、任务和生物等,另外还...
  • lfhfut
  • lfhfut
  • 2007年09月10日 21:47
  • 3269

服务器结构探讨 -- 登录服的负载均衡

  回想一下我们在玩wow时的操作流程:运行wow.exe进入游戏后,首先就会要求我们输入用户名和密码进行验证,验证成功后才会出来游戏世界列表,之后是排队进入游戏世界,开始游戏...  可以看到跟前面...
  • lfhfut
  • lfhfut
  • 2007年09月10日 00:12
  • 3645

Minecraft我的世界开服教程

宿舍几个人在玩Minecraft,于是在12教整了台破主机,用校园网搭了个Minecraft的服务器。搜索了好久,终于上手了,贴一下过程吧:FirstBlood: 下载安装服务器我用的是官方原版的1....
  • Jesounao
  • Jesounao
  • 2015年05月17日 22:53
  • 637

游戏服务器架构探讨

有段时间没有研究技术了,这次正好看到了新版的mangos,较之以前我看的版本有了比较大的完善,于是再次浏览了下他的代码,也借此机会整理下我在游戏服务器开发方面的一些心得,与大家探讨。    另外由于...
  • wallwind
  • wallwind
  • 2013年08月23日 16:39
  • 2438

centos搭建我的世界服务器

这是我之前写在博客园的,同一个人。       作为常和网络打交道的程序员,经常会遇到需要服务器的场合,比如搭建一个web服务器,一个代理服务器,又或者一个小型的游戏服务器。 我时常和朋友一起玩一...
  • wwlxz22
  • wwlxz22
  • 2016年10月21日 21:21
  • 2226
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:服务器结构探讨 -- 继续世界服
举报原因:
原因补充:

(最多只允许输入30个字)