9

大型多人在线 RPG 游戏是如何构建的?

  • 他们建立在什么服务器基础架构上?尤其是有这么多客户实时连接和通信。

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

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

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

谢谢你的时间。

4

6 回答 6

5

许多道路通向罗马,许多建筑通向 MMORPG。

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

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

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

于 2009-09-13T20:37:53.170 回答
3

他们建立在什么服务器基础架构上?尤其是有这么多客户实时连接和通信。

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

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

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

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

UDP 是使用的协议。它很快,因为它不保证会收到数据包。你不在乎一点延迟是否会导致客户端失去他们的世界地位。

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

大多数 MMO 都有限制一定数量的人的区域。对于那些在一个区域有 100 人的企业来说,通常会有很高的延迟。服务器必须处理 100 多个发送的法术,它必须计算每个法术的伤害量。对于 5 大 MMO,我认为每天都有 10 到 20 名非常聪明、具有数学天赋的开发人员组成的团队致力于这项工作,但目前还没有一款 MMO 能够做到这一点,大多数在 100 名玩家之后就崩溃了。

--

看看Wowemu(没有官方网站,我不想链接到一个狡猾的网站)。这是基于ApireCore的,它是一个 MMO 模拟器,或者基本上是 WoW 协议的逆向工程师。这就是私人魔兽服务器运行的原因。据我记得Wowemu是

  • mysql
  • Python

但是 ApireCore 是 C++。

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

于 2009-09-14T08:34:01.493 回答
2

由于 MMO 大体上需要企业资源来开发和部署,此时它们是有价值的公司 IP,因此没有大量关于实施的公开信息。

可以确定的一件事是,由于 MMO 大体上使用自定义客户端和 3D 渲染器,因此它们不使用 HTTP,因为它们不是 Web 浏览器。在线游戏将在 TCP/IP 或 UDP 之上建立自己的协议。

游戏模拟本身将使用与任何联网 3D 游戏相同的技术构建,因此您可以查看该问题域的资源以了解更多信息。

对于魔兽世界的老大爷,我们可以猜测他们的数据库是甲骨文,因为暴雪的工作清单经常将甲骨文经验作为要求/加分。他们使用 Lua 编写用户界面脚本。C++ 和 OpenGL(适用于 Mac)和 Direct3D(适用于 PC)可以被假定为游戏客户端的实现语言,因为这是制作游戏的语言。

一家热衷于讨论其实施的公司是 CCP,即 Eve Online 的创建者。他们发表了许多关于 Eve 基础设施的演示文稿和文章,这是一个特别有趣的案例,因为他们在 Eve 的很多实现中使用 Stackless Python。

http://www.disinterest.org/resource/PyCon2006-StacklessInEve.wmv http://us.pycon.org/2009/conference/schedule/event/91/

最近还有一篇关于 Eve 架构的 Game Developer Magazine 文章:

https://store.cmpgame.com/product/3359/Game-Developer-June%7B47%7DJuly-2009-Issue---数字版

于 2009-09-13T21:37:07.523 回答
1

软件工程广播播客与 Jim Purbrick 有一个关于第二人生的插曲,其中讨论了服务器、世界、缩放和其他 MMORPG 内部。

于 2009-09-13T20:37:17.470 回答
1

传统上,MMO 是基于在 Linux 上运行的 C++ 服务器应用程序与使用 OpenGL 或 DirectX 的后端存储和胖客户端应用程序的数据库通信。

在许多情况下,客户端和服务器会嵌入一个脚本引擎,该引擎允许以更高级别的语言定义行为。EVE 值得注意的是,它主要是在 Python 中实现并在 Stackless 之上运行,而不是主要是带有一些高级脚本的 C++。

通常,服务器位于一个循环中,读取来自连接客户端的请求,处理它们以强制执行游戏机制,然后向客户端发送更新。UDP 可用于最小化延迟和过时数据的重新传输,但由于 RPG 通常不使用 twitch 游戏玩法,因此 TCP/IP 通常是更好的选择。Comet 或 BOSH 可用于允许基于 Web 的 MMO 的 HTTP 上的双向通信,并且 Web 套接字很快将成为一个不错的选择。

如果我今天要构建一个新的 MMO,我可能会使用 XMPP、BOSH 并在 JavaScript 中构建客户端,因为这将允许它在没有胖客户端下载的情况下工作,并与基于 XMPP 的 IM 和语音系统(如 gchat)进行互操作。一旦 WebGL 得到广泛支持,这甚至将允许基于浏览器的 3D 虚拟世界。

由于环境太大而无法在单个进程中进行模拟,因此它们通常在地理上被划分为进程,每个进程都模拟世界的一小块区域。通常存在一个世界的最佳人口,因此运行多个副本(分片),供不同的人使用。

这里的运营总监 Ian Wilkes 对第二人生架构做了一个很好的介绍:http: //www.infoq.com/presentations/Second-Life-Ian-Wilkes

我关于第二人生技术的大部分演讲都链接到我的博客:http: //jimpurbrick.com

于 2011-06-11T16:52:18.470 回答
-1

看看二郎。它是一种并发编程语言和运行时系统,旨在支持分布式、容错、软实时、不间断的应用程序。

于 2009-09-13T20:38:38.773 回答