基于浏览器的实时MMO游戏的内部工作原理

时间:2017-06-10 18:35:05

标签: javascript php database server real-time

所以,假设有一个由网站组成的游戏,以及可以从该网站启动的客户端。我看了一下,一个相关的例子就是Habbo Hotel。

我要问的是,使这种游戏发挥作用的所有不同部分是什么:对于网站部分,我想象一下服务器,数据库以及一些HTML,CSS和PhP需要编码,但客户端如何运作?

更具体地说,客户端到服务器(反之亦然)的实时通信将如何发生? 假设客户端用C编码,如何将C集成到(我假设PhP框架的)浏览器窗口中? 请注意,客户端永远不会在用户的PC上下载,因此它将驻留在哪里?

对不起,如果这些问题很多,如果答案过于繁琐而无法撰写,请随意留下一些文档或教程(我已经寻找但是避难所&#39)我真的能找到了),我会高兴地自己读它们。提前谢谢。

1 个答案:

答案 0 :(得分:1)

一方面,你的问题太广泛了,但另一方面,我可以给你一些如何以现代方式做到这一点的指示:

  • 没有客户端,只有浏览器中的页面
  • 使用HTML5画布,您可能还想查看SPA(单页应用程序)
  • 通过websocket连接,有HTML5 javascript实现和服务器端的PHP或node.js
  • 最好的是,在服务器上使用node.js,PHP会太麻烦
  • 通过websocket,发送和接收JSON对象
  • 主机平台(Linux)上的主机node.js
  • 您可能希望将phaser视为HTML5客户端画布渲染框架,但它缺乏许多功能,主要面向基于抽搐的动作游戏,由于滞后而无法很好地适应这种架构

这将引出一个结论:javascript是这个系统的核心。你会遇到几个障碍,例如:

  • 使用SSL登录的websockets上的安全性
  • 避免使用SSL获取实时数据(1 Hz以上)
  • 画布内客户端上的UI不易实现,您必须重新发明轮子或为此找到UI库
  • 期望滞后,网络代码将使用TCP / IP或UDP(Lidgren?)和protobuf(Lidgren + protobuf)相对于本机C / C#代码需要大约20%-30%的开销是什么高频AAA标题使用(MMORPG或FPS等)

从您提出的问题中我感觉到对该领域缺乏了解和了解。我想你必须提前6-12个月学习。这是我的建议,因为如果你马上开始你会犯很多错误并浪费你的时间。如果以上是您不知道的任何名称,请搜索并研究它们。并且不要开始编码,在你面前有一个非常陡峭的学习曲线!

编辑:有关服务器端的更多信息

如果你想实现一个基于动作的互动游戏(比如FPS或2D射击游戏),我必须告诉你。

你可能想直接使用TCP / IP连接和二进制消息(没有HTTP,没有websocket,而不是protobuf)来研究Unity 3D。

C#(客户端)和node.js(服务器端)是一个很好的组合。对于水平扩展,您可能需要研究云计算,docker,配置和许多服务器安全性。

但这是一个充满敌意的地形,它会引导你进入DevOps领域,这是游戏开发的一部分。更像是建筑师的工作。想象一下,3层系统(客户端+服务器+数据库)在服务器上存在瓶颈。

您希望生成更多节点来处理更多客户端。这就是每个基于游说的游戏(LoL,Overwatch,WoT,WoW实例等)以及您为分区地图所做的事情(例如LOTRO,RIFT中的“地图”,以及更多MMORPGS)。此外,镜像(这意味着相同地图的多个实例,以容纳人口过多的人群)。

要进行这种水平扩展,您的服务器必须自行在线/离线,而无需点击命令和控制(例如,木偶和类似软件)。

虽然这是最终的方法,但它也有最陡峭的学习曲线,特别是因为安全性(广告DDOS,泛滥,慢懒,假客户端和列表继续)。在连接到群集并上线之前,必须动态“配置”新节点(例如,cloud-config),因此有一个全新的痛苦和学习世界。

这种基于云的弹性服务器系统的中心部分是SSO(单点登录)。