gpt4 book ai didi

javascript - 基于浏览器的实时 MMO 游戏的内部运作

转载 作者:搜寻专家 更新时间:2023-10-30 23:34:46 24 4
gpt4 key购买 nike

因此,假设有一款游戏包含一个网站,以及一个您可以从该网站启动的客户端。我看了一下,一个相关的例子是 Habbo Hotel。

我要问的是,让这样的游戏运行的所有不同部分是什么:对于网站部分,我想需要一个服务器、一个数据库以及一些 HTML、CSS 和 PhP 编码,但客户端将如何操作?

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

很抱歉,如果这些问题很多,如果答案太繁琐而无法撰写,请随意留下一些文档或教程(我一直在寻找但还没有真正能够)找到),我会很乐意自己阅读它们。提前致谢。

最佳答案

一方面你的问题太宽泛,但另一方面我可以给你一些关于如何以现代方式做到这一点的建议:

  • 没有客户端,只有浏览器中的一个页面
  • 使用 HTML5 Canvas ,您可能还想研究 SPA(单页应用程序)
  • 通过 websocket 连接,服务器端有 HTML5 javascript 实现和 PHP 或 node.js
  • 最好在服务器上使用 node.js,PHP 太麻烦了
  • 通过 websocket,发送和接收 JSON 对象
  • 在其原生平台 (Linux) 上托管 node.js
  • 您可能希望将 Phaser 作为 HTML5 客户端 Canvas 渲染框架来研究,但它缺乏很多功能并且主要面向基于 twitch 的 Action 游戏,由于滞后性不适用于此架构<

这会让您得出一个结论:javascript 是该系统的核心。您会遇到几个障碍,例如:

  • 使用 SSL 登录的 websockets 的安全性
  • 避免使用 SSL 传输实时数据(1 Hz 以上)
  • canvas 内的客户端 UI 不容易实现,您将不得不重新发明轮子或为此寻找 UI 库
  • 预计会出现延迟,相对于使用 TCP/IP 或 UDP(Lidgren?)和 protobuf(Lidgren+protobuf)的 native C/C# 代码,网络代码将占用大约 20%-30% 的开销,高频 AAA 标题使用(类似 MMORPG 或 FPS)

从您提出的问题中,我感觉到对该领域的理解和知识严重缺乏。我猜你必须提前学习 6-12 个月以上。这是我的建议,因为如果你马上开始,你会犯很多错误并浪费你的时间。如果上面有什么你不知道的名字,请搜索并好好研究。不要开始编写代码,前面有一条非常陡峭的学习曲线!


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

如果您想实现基于 Action 的互动游戏(例如 FPS 或 2D 射击游戏),我必须告诉您这一点。

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

C#(客户端)和 node.js(服务器端)是一个很好的组合。对于水平扩展,您可能需要研究云计算、Docker、供应和大量服务器安全性。

但这是一个充满敌意的领域,它会将您带入 DevOps 领域,这与游戏开发相去甚远。更像是建筑师的工作。想象一下 3 层系统(客户端 + 服务器 + 数据库)在服务器上存在瓶颈。

您想生成更多节点来处理更多客户端。这是每个基于大厅的游戏(英雄联盟、守望先锋、WoT、WoW 实例等)以及您对分区 map (例如 LOTRO、RIFT 和更多 MMORPGS 中的“ map ”)所做的事情。此外,镜像(这意味着同一 map 的多个实例以容纳人口过多的人群)。

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

虽然这是最终的方法,但它的学习曲线也是最陡峭的,尤其是因为安全性(广告 DDOS、洪水、懒猴、假客户端,等等)。新节点必须在连接到集群并上线之前即时“配置”(例如云配置),因此这是一个充满痛苦和学习的全新世界。

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

关于javascript - 基于浏览器的实时 MMO 游戏的内部运作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44476766/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com