大型多人在线角色扮演游戏是如何构建的?

Rob*_*cks 9 web-services communication real-time

大型多人在线角色扮演游戏是如何构建的?

  • 他们构建了什么服务器基础架构?特别是有这么多客户实时连接和沟通.

  • 他们是否使用执行页面请求的脚本进行管理?或安装在后台运行并管理与连接客户端通信的服务?

  • 他们使用其他协议吗?因为HTTP不允许服务器将数据推送到客户端.

  • "引擎"如何工作,集中处理数百个相互冲突的游戏事件?

谢谢你的时间.

Eri*_* J. 5

许多道路通往罗马,许多建筑都通向了MMORPG.

以下是您的要点的一般想法:

  • 服务器基础架构需要支持向外扩展的能力......随着负载的增加添加额外的服务器.顺便说一句,这非常适合云计算.我目前正在运行一个大型金融服务应用程序,需要根据一天中的时间和一年中的时间进行扩展和缩小.我们使用Amazon AWS几乎可以立即添加和删除虚拟服务器.
  • 我熟悉的MMORPG可能不使用Web服务进行通信(因为它们是无状态的),而是使用自定义服务器端程序(例如,侦听TCP和/或UDP消息的服务).
  • 他们可能使用自定义的基于TCP和/或UDP的协议(查看套接字通信)
  • 大多数游戏被划分为"世界",将同一虚拟世界中的玩家数量限制为一个服务器(可能具有大量CPU和大量内存)可以合理处理的游戏事件数量.确切的事件处理机制取决于游戏设计者的要求,但通常我希望传入的事件进入优先级队列(按接收时间和/或发送时间的优先顺序排列,可能还有其他标准"如果有多糟糕"我们忽略了这个事件?").

这是一个非常大的主题.我建议您查看Amazon.com上有关此主题的书籍.

  • EVE Online是例如"魔兽世界"使用的"分段世界"方法的例外.您可以在以下网址阅读他们使用的设置:http://highscalability.com/eve-online-architecture (2认同)

Chr*_*s S 3

它们构建在什么服务器基础设施上?尤其是有如此多的客户实时连接和通信。

我猜想服务器几乎 99% 的时间都会在 Linux、BSD 或 Solaris 上运行。

他们是否使用在页面请求上执行的脚本进行管理?或者在后台运行并管理与连接的客户端的通信的已安装服务?

您的客户端与之通信的服务器将是运行守护程序或服务的服务器,该服务器空闲地侦听连接。对于实例(地下城),通常会为每个组启动一个新进程,这意味着在某处有一个调度程序服务来管理它(类似于线程池)

他们使用其他协议吗?因为HTTP不允许服务器向客户端推送数据。

UDP 是使用的协议。它很快,因为它不保证会收到数据包。您并不关心一点延迟是否会导致客户端失去其世界地位。

“引擎”如何工作以集中处理数百个冲突的游戏事件?

大多数 MMO 游戏都有区域限制,仅限一定数量的人。对于那些在一个区域有数百人的地区,通常会出现很高的延迟。服务器必须处理数百个向其发送的咒语,并且必须计算每个咒语的伤害量。对于五大 MMO,我想象有 10 到 20 名非常聪明、有数学天赋的开发人员组成的团队每天都在努力工作,但目前还没有一款 MMO 能够做到这一点,大多数在 100 名玩家之后就崩溃了。

--

看看Wowemu(没有官方网站,我不想链接到不可靠的网站)。这是基于ApireCore,它是一个 MMO 模拟器,或者基本上是 WoW 协议的逆向工程师。这就是《魔兽世界》私人服务器运行的内容。根据我的记忆,Wowemu 是

  • mysql
  • Python

然而 ApireCore 是 C++。

Wowemu 的后端非常简单(不过我在 2005 年尝试过),而且数据库模式可能完全过度简化。它确实可以让您很好地了解所涉及的内容。