大型多人在线 RPG 游戏是如何构建的?
他们建立在什么服务器基础架构上?尤其是有这么多客户实时连接和通信。
他们是否使用在页面请求上执行的脚本进行管理?或安装在后台运行并管理与连接客户端的通信的服务?
他们使用其他协议吗?因为 HTTP 不允许服务器向客户端推送数据。
“引擎”如何工作,集中处理数百个相互冲突的游戏事件?
谢谢你的时间。
大型多人在线 RPG 游戏是如何构建的?
他们建立在什么服务器基础架构上?尤其是有这么多客户实时连接和通信。
他们是否使用在页面请求上执行的脚本进行管理?或安装在后台运行并管理与连接客户端的通信的服务?
他们使用其他协议吗?因为 HTTP 不允许服务器向客户端推送数据。
“引擎”如何工作,集中处理数百个相互冲突的游戏事件?
谢谢你的时间。
许多道路通向罗马,许多建筑通向 MMORPG。
以下是您的要点的一些一般性想法:
这是一个非常大的课题。我建议您在 Amazon.com 上查看有关该主题的书籍。
我猜这些服务器几乎 99% 的时间都在 Linux、BSD 或 Solaris 上运行。
您的客户端与之通信的服务器将是运行守护程序或服务的服务器,该服务器处于空闲状态以侦听连接。对于实例(地牢),通常为每个组启动一个新进程,这意味着在某处有一个调度程序服务来管理它(类似于线程池)
UDP 是使用的协议。它很快,因为它不保证会收到数据包。你不在乎一点延迟是否会导致客户端失去他们的世界地位。
大多数 MMO 都有限制一定数量的人的区域。对于那些在一个区域有 100 人的企业来说,通常会有很高的延迟。服务器必须处理 100 多个发送的法术,它必须计算每个法术的伤害量。对于 5 大 MMO,我认为每天都有 10 到 20 名非常聪明、具有数学天赋的开发人员组成的团队致力于这项工作,但目前还没有一款 MMO 能够做到这一点,大多数在 100 名玩家之后就崩溃了。
--
看看Wowemu(没有官方网站,我不想链接到一个狡猾的网站)。这是基于ApireCore的,它是一个 MMO 模拟器,或者基本上是 WoW 协议的逆向工程师。这就是私人魔兽服务器运行的原因。据我记得Wowemu是
但是 ApireCore 是 C++。
Wowemu 的后端非常简单(不过我在 2005 年尝试过),并且可能完全过度简化了数据库模式。它确实使您对所涉及的内容有一个很好的了解。
由于 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---数字版
软件工程广播播客与 Jim Purbrick 有一个关于第二人生的插曲,其中讨论了服务器、世界、缩放和其他 MMORPG 内部。
传统上,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
看看二郎。它是一种并发编程语言和运行时系统,旨在支持分布式、容错、软实时、不间断的应用程序。