转自 http://blog.csdn.net/lfhfut/article/details/1779848

  讨论了这么久我们一直都还没有进入游戏世界服务器内部,现在就让我们来窥探一下里面的结构吧。

  对于现在大多数MMORPG来说,游戏服务器要处理的基本逻辑有移动、聊天、技能、物品、任务和生物等,另外还有地图管理与消息广播来对其他高级功能做支撑。如纵队、好友、公会、战场和副本等,这些都是通过基本逻辑功能组合或扩展而成。

  在所有这些基础逻辑中,与我们要讨论的服务器结构关系最紧密的当属地图管理方式。决定了地图的管理方式也就决定了我们的服务器结构,我们仍然先从最简单的实现方式开始说起。

  回想一下我们曾战斗过无数个夜晚的暗黑破坏神,整个暗黑的世界被分为了若干个独立的小地图,当我们在地图间穿越时,一般都要经过一个叫做传送门的装置。世界中有些地图间虽然在地理上是直接相连的,但我们发现其游戏内部的逻辑却是完全隔离的。可以这样认为,一块地图就是一个独立的数据处理单元。

  既然如此,我们就把每块地图都当作是一台独立的服务器,他提供了在这块地图上游戏时的所有逻辑功能,至于内部结构如何划分我们暂不理会,先把他当作一个黑盒子吧。

  当两个人合作做一件事时,我们可以以对等的关系相互协商着来做,而且一般也都不会有什么问题。当人数增加到三个时,我们对等的合作关系可能会有些复杂,因为我们每个人都同时要与另两个人合作协商。正如俗语所说的那样,三个和尚可能会碰到没水喝的情况。当人数继续增加,情况就变得不那么简单了,我们得需要一个管理者来对我们的工作进行分工、协调。游戏的地图服务器之间也是这么回事。

  一般来说,我们的游戏世界不可能会只有一块或者两块小地图,那顺理成章的,也就需要一个地图管理者。先称它为游戏世界的中心服务器吧,毕竟是管理者嘛,大家都以它为中心。

  中心服务器主要维护一张地图ID到地图服务器地址的映射表。当我们要进入某张地图时,会从中心服上取得该地图的IP和port告诉客户端,客户端主动去连接,这样进入他想要去的游戏地图。在整个游戏过程中,客户端始终只会与一台地图服务器保持连接,当要切换地图的时候,在获取到新地图的地址后,会先与当前地图断开连接,再进入新的地图,这样保证玩家数据在服务器上只有一份。

  我们来看看结构图是怎样的:

   中心服务器
          /      /        /        /
         /        /        /        /
 登录服 地图1 地图2 地图n
         /        |         /       /
          /       |        /       /
         客户端

  很简单,不是吗。但是简单并不表示功能上会有什么损失,简单也更不能表示游戏不能赚钱。早期不少游戏也确实采用的就是这种简单结构。

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

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

  这种结构在实际的部署中也遇到了一些挑战。对于一般的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

转载于:https://www.cnblogs.com/colourstar/p/7878099.html

【转】服务器结构探讨 -- 简单的世界服实现相关推荐

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

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

  2. Mangos源码分析(3):服务器结构探讨之简单的世界服实现

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

  3. Mangos源码分析(2):服务器结构探讨之登录服的负载均衡

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

  4. 我的世界小游戏服务器开服制作教程,《我的世界》服务器制作技巧 简单架设开服...

    导 读 我的世界三种常见服务器简单架设 快速开服.目前大家见过最多的服务器类型可能只有三种,分别是CraftBukkit.Spigot.MCPC Plus三种.其实对于稍微了解服务器的玩家而言,想要实 ...

  5. 游戏服务器结构讨论(转)

    有关游戏开发:游戏开发始终是个小项目,另外由于开发时间的限制,软件工程的思想和方法在游戏开发领域并不怎么受欢迎.从游戏开发团队的规模也能看出,基本上只能算小开发团队,有些工作室性质的,那就更简单了. ...

  6. 【转】游戏服务器架构探讨

    这里讨论的游戏服务器架构大概是目前国内乃至世界上的网游通用的一种架构了: http://bbs.gameres.com/showthread.asp?threadid=93775 作者:qinglan ...

  7. 我的世界e 服务器怎么注册,我的世界E世界RPG生存服 电脑版1.6.2群组云服务器

    我的世界电脑版E世界RPG生存服,PC版1.6.2群组云服务器.服务器有多种玩法模式,独创RPG钻石系统享受RPG打装备强化的乐趣,一键式圈地指令菜单新手再也不用担心不会使用指令! [我的世界pc版交 ...

  8. 揭秘你所看不见的技术原理 - 游戏世界服

    摘要 当前游戏世界万千不同,不同类型游戏各领风骚.单机巨作.即时战略(RTS).多人在线战术竞技(MOBA).第一人称射击(FPS),甚至简单休闲游戏都各自占领着特定的市场.但今天要写的并不是对游戏进 ...

  9. 我的世界怎么免费开一个服务器是正版,我的世界免费服务器如何去搭建?我的世界服务器如何选择...

    我的世界免费服务器如何去搭建?我们将通过一个一步步的.新手友好的教程来向你展示如何搭建一个"我的世界(Minecraft)"服务器.这将会是一个长期的多人游戏服务器,你可以与来自世 ...

最新文章

  1. 布尔定理及证明(完整版)
  2. Linux帮助使用方法详解
  3. IT运维管理人员轻松管理桌面终端
  4. fz响应无法连接到服务器,fz链接不到服务器
  5. asp.net 2.0 中引用Web.config内的连接字符串的方法
  6. Zend Framework 多模块配置 (二)
  7. java fx border_JavaFx UI控件与代码间的绑定方法
  8. sap权限激活_SA*P 自定义权限对象
  9. 软件工程项目冲刺第二天
  10. 渗透测试流程信息收集
  11. 精通Python网络爬虫:核心技术、框架与项目实战.1.4 网络爬虫的类型
  12. Python Tkinter之variable用法
  13. 图形学空间坐标变化之二维图形观察及变换
  14. java调用百度地图api,展示世界地图
  15. 音频信号处理——基音周期
  16. 名帖109 鲜于枢 小楷《老子道德经卷》
  17. 正确刷牙的健康小常识
  18. 67在C51语言表示16进制数,计算机真题
  19. 初二因式分解奥数竞赛题_初中数学因式分解(含答案)竞赛题精选.doc
  20. 计算机考研复试专业课【数据库】

热门文章

  1. 通过交互式网页爬取,抓取天猫商品价格
  2. 苹果手机速度慢_苹果MagSafe 磁吸充电器的用户请注意这几个潜在问题
  3. 小学计算机教研组总结,小学数学教研组长工作总结(精选多篇).doc
  4. 运动蓝牙耳机什么好用?防水性能好的运动蓝牙耳机
  5. 人人投助力犬神寻找网结束行业“擦边球”运作
  6. 词霸天下---词根244【-nat- = -nasc- = -naiss- = -naiv- 出 生】
  7. 约瑟夫问题与魔术(五)——魔术《自我匹配的奇迹》中的数学原理
  8. 3dMax 样条线的修剪、挤出(窗格)
  9. MySQL(5.7版本)安装 + windows远程连接 Linux MySQL
  10. 推荐系统的冷启动问题