如何构建大型多人在线角色扮演游戏?
他们构建了哪些服务器基础架构?特别是有这么多客户实时连接和沟通。
他们是否使用针对页面请求执行的脚本进行管理?或已安装的服务在后台运行并管理与已连接客户端的通信?
他们使用其他协议吗?因为HTTP不允许服务器将数据推送到客户端。
“引擎”如何运作,集中处理数百个相互冲突的游戏事件?
感谢您的时间。
答案 0 :(得分:5)
许多道路通往罗马,许多建筑都通向了MMORPG。
以下是您的要点的一般想法:
这是一个非常大的主题。我建议您在Amazon.com上查看有关此主题的书籍。
答案 1 :(得分:3)
我猜服务器将在99%的时间内在Linux,BSD或Solaris上运行。
您的客户端与之通信的服务器将是运行守护程序或服务的服务器,该服务器处于空闲状态并侦听连接。对于实例(地牢),通常会为每个组启动一个新进程,这意味着有一个调度程序服务在某处管理(类似于线程池)
UDP是使用的协议。它很快,因为它不能保证收到数据包。如果一点延迟导致客户端失去世界地位,你就不在乎了。
大多数MMO都有区域,这限制了一定数量的人。对于那些在一个区域内拥有100人的人来说,通常存在高延迟。服务器必须处理100个以其方式发送的法术,必须计算每个法术的伤害数量。对于五大MMO,我想有10到20名非常聪明,有数学天赋的开发人员每天都在进行这项工作,并且没有一个MMO在那里做得对,大多数在100名玩家之后休息。
-
查看Wowemu(没有官方网站,我不想链接到一个狡猾的网站)。这基于ApireCore,它是一个MMO模拟器,或者基本上是WoW协议的逆向工程师。这就是私有魔兽世界服务器的用武之地。从我记得Wowemu是
然而,ApireCore是C ++。
Wowemu的后端非常简单(我在2005年尝试过),可能完全过度简化了数据库模式。它确实让您了解所涉及的内容。
答案 2 :(得分:2)
由于MMO大体上需要开发和部署企业资源,此时它们是有价值的公司IP,因此没有大量关于实施的公开信息。
有一点可以肯定的是,由于MMO大体上使用自定义客户端和3D渲染器,因此它们不使用HTTP,因为它们不是Web浏览器。在线游戏将在TCP / IP或UDP之上建立自己的协议。
游戏模拟本身将使用与任何联网3D游戏相同的技术构建,因此您可以查看该问题域的资源以了解更多信息。
对于大爸爸,魔兽世界,我们可以猜测他们的数据库是Oracle,因为暴雪的工作列表经常引用Oracle的经验作为要求/加号。他们使用Lua进行用户界面脚本编写。可以假设C ++和OpenGL(适用于Mac)和Direct3D(适用于PC)作为游戏客户端的实现语言,因为这就是游戏的制作过程。
一个很酷的讨论实施的公司是CCP,Eve在线的创建者。他们发布了许多关于Eve基础设施的演示文章和文章,这是一个特别有趣的案例,因为他们使用Stackless Python来实现Eve的很多实现。
http://www.disinterest.org/resource/PyCon2006-StacklessInEve.wmv http://us.pycon.org/2009/conference/schedule/event/91/
最近有一篇关于夏娃建筑的游戏开发者杂志文章:
https://store.cmpgame.com/product/3359/Game-Developer-June%7B47%7DJuly-2009-Issue---Digital-Edition
答案 3 :(得分:1)
软件工程广播播客有一个episode with Jim Purbrick about Second Life,讨论服务器,世界,缩放和其他MMORPG内部。
答案 4 :(得分:1)
传统上,MMO基于在Linux上运行的C ++服务器应用程序,与使用OpenGL或DirectX的后端存储和胖客户端应用程序的数据库进行通信。
在许多情况下,客户端和服务器嵌入了脚本引擎,该引擎允许以更高级别的语言定义行为。 EVE值得注意的是,它主要是用Python实现的,并且运行在Stackless之上,而不是主要是带有一些高级脚本的C ++。
通常,服务器处于循环中,读取来自连接客户端的请求,处理它们以强制执行游戏机制,然后向客户端发送更新。 UDP可用于最小化延迟和过时数据的重传,但由于RPG通常不使用抽搐游戏,TCP / IP通常是更好的选择。 Comet或BOSH可以用于通过HTTP进行双向通信,用于基于Web的MMO和Web套接字很快就会成为一个很好的选择。
如果我今天正在构建一个新的MMO,我可能会使用XMPP,BOSH并在JavaScript中构建客户端,因为它可以在没有胖客户端下载的情况下工作,并与基于XMPP的IM和语音系统(如gchat)互操作。一旦WebGL得到广泛支持,这甚至可以允许基于浏览器的3D虚拟世界。
由于环境太大而无法在单个过程中进行模拟,因此它们通常在地理位置之间进行分割,每个过程模拟世界的一小块区域。通常,世界上存在最佳人口,因此运行不同人群的多个副本(分片)。
在这里担任运营总监的Ian Wilkes对第二人生建筑进行了很好的介绍:http://www.infoq.com/presentations/Second-Life-Ian-Wilkes
我关于Second Life技术的大部分讨论都与我的博客相关联:http://jimpurbrick.com
答案 5 :(得分:-1)
看看Erlang。它是一种并发编程语言和运行时系统,旨在支持分布式,容错,软实时,不间断的应用程序。