游戏开发论坛

 找回密码
 立即注册
搜索
楼主: qinglan

游戏服务器技术交流

[复制链接]

149

主题

4981

帖子

5033

积分

论坛元老

Rank: 8Rank: 8

积分
5033
QQ
发表于 2007-9-10 23:05:00 | 显示全部楼层

Re:游戏服务器技术交流

嘿嘿,我只是友情顶贴~  ;-)

不过我很想知道网络连接是否能够实现不断开重连的前提下的重定向?

2

主题

22

帖子

28

积分

注册会员

Rank: 2

积分
28
QQ
发表于 2007-9-11 09:19:00 | 显示全部楼层

Re:游戏服务器技术交流

顶下先

90

主题

797

帖子

833

积分

高级会员

论坛版主

Rank: 4

积分
833
QQ
发表于 2007-9-11 14:18:00 | 显示全部楼层

Re:游戏服务器技术交流

现在的很多游戏都是运用类似网关的技术,会保持用户一直链接某台服务器,而不是根据地图所在,让玩家在转换地图时,连接不同的服务器。这样做有非常明显得好处,就是减少握手时间。

3

主题

159

帖子

159

积分

注册会员

Rank: 2

积分
159
发表于 2007-9-11 16:01:00 | 显示全部楼层

Re:游戏服务器技术交流

en,学到东东了!

149

主题

4981

帖子

5033

积分

论坛元老

Rank: 8Rank: 8

积分
5033
QQ
发表于 2007-9-11 16:10:00 | 显示全部楼层

Re:游戏服务器技术交流

会保持用户一直链接某台服务器,而不是根据地图所在


这样的话,那些网关服务器岂不是负担很重?如何实现负载平衡?设置多台网关服务器吗?岂不是成本会很高?

30

主题

227

帖子

232

积分

中级会员

Rank: 3Rank: 3

积分
232
发表于 2007-9-11 20:16:00 | 显示全部楼层

Re:游戏服务器技术交流

多谢楼主。提个意见,能不能对技术细节和编程方面的多涉及一点呢……
最近I/O模型弄得我哭天喊地……

7

主题

82

帖子

110

积分

注册会员

Rank: 2

积分
110
QQ
 楼主| 发表于 2007-9-11 22:26: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

7

主题

82

帖子

110

积分

注册会员

Rank: 2

积分
110
QQ
 楼主| 发表于 2007-9-11 22:33:00 | 显示全部楼层

Re: Re:游戏服务器技术交流

idnemo: Re:游戏服务器技术交流

多谢楼主。提个意见,能不能对技术细节和编程方面的多涉及一点呢……
最近I/O模型弄得我哭天喊地……


在计划中这是一个系列的开始

我会提出一个现在来说比较通用的服务器结构,然后开始分别对每部分的技术细节和编程实现作探讨

至于为什么要这么麻烦的一点点说,而不是直接提出最终的结构,我是希望不仅能够知道应该是怎样的,而更重要的是应该知道为什么是现在这个样子的

发的有些慢,是因为这些文字我都是先写在纸上,在纸上都要至少修改一到两遍,保证内容是正确的,语句是通顺的,然后才发上来,后面有些打字错误就没法避免了

虽然只是简单的技术探讨,但我也不希望乱说一气的话导致被人唾骂  [em1]

另外,既然是探讨,就不应该只是一个人在说吧,欢迎提出反对意见,给别人解释自己思想的过程,也是对自己知识的梳理,而且,想要把心中所想的正确地表达出来也是需要一定能力的,最近我越发地感到这一点了  [em10]

7

主题

82

帖子

110

积分

注册会员

Rank: 2

积分
110
QQ
 楼主| 发表于 2007-9-11 22:41:00 | 显示全部楼层

Re: Re:游戏服务器技术交流

sjinny: Re:游戏服务器技术交流

会保持用户一直链接某台服务器,而不是根据地图所在


这样的话,那些网关服务器岂不是负担很重?如何实现负载平衡?设置多台网关服务器吗?岂不是成本会很高?



当连接数多时确实可以用多个网关

游戏服务器硬件成本不高,就算是现在很牛x的“刀片”也不贵

149

主题

4981

帖子

5033

积分

论坛元老

Rank: 8Rank: 8

积分
5033
QQ
发表于 2007-9-11 22:51:00 | 显示全部楼层

Re:游戏服务器技术交流

晕……………………不知有多少公司有底气说“游戏服务器硬件成本不高,就算是现在很牛x的“刀片”也不贵”…………


我有个问题,在你提出的结构的目前版本之后,各个Zone Server之间的职责划分应该是根据游戏场景的空间来划分的吧,这样的话,一个区域内的玩家都会集中于一个服务器上,那么意味着同一个区域内对玩家的承载能力仍然十分有限,那么有没有办法让多个服务器同时为同一个区域内的玩家服务呢?这样意味着通过增加服务器不仅能增加整个游戏世界的在线人数,而且能增加一个区域内的在线人数……不知道目前有没有这样做的游戏?

^_^
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-2-25 19:53

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表