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

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

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

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

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

谢谢你的时间。

有帮助吗?

解决方案

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

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

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

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

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

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

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

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

--

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

  • mysql
  • Python

然而 ApireCore 是 C++。

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

其他提示

条条大路通罗马,多种建筑通MMORPG。

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

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

总体而言,这是一个非常大的主题。我建议您在 Amazon.com 上查看有关此主题的书籍。

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

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

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

对于魔兽世界的老大,我们可以猜测他们的数据库是 Oracle,因为暴雪的职位列表经常引用 Oracle 经验作为要求/加分。他们使用 Lua 进行用户界面脚本编写。C++ 和 OpenGL(适用于 Mac)和 Direct3D(适用于 PC)可以被假定为游戏客户端的实现语言,因为这就是制作游戏的语言。

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

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

最近还有一篇关于 Eve 架构的游戏开发者杂志文章:

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

软件工程广播播客有一个 吉姆·珀布里克关于《第二人生》的一集 其中讨论了服务器、世界、扩展和其他 MMORPG 内部结构。

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

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

通常,服务器会循环读取来自连接的客户端的请求,处理它们以强制执行游戏机制,然后向客户端发送更新。UDP 可用于最大限度地减少延迟和过时数据的重新传输,但由于 RPG 通常不采用抽搐游戏,因此 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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top