基于浏览器的实时 MMO 游戏的内部运作
Inner workings of browser based real-time MMO games
所以,假设有一个游戏由一个网站和一个可以从该网站启动的客户端组成。我看了一下,一个相关的例子是哈宝酒店。
我要问的是,让这样的游戏运行的所有不同部分是什么:对于网站部分,我想象一个服务器、一个数据库和一些 HTML,CSS 和 PhP 需要编码,但客户端如何操作?
更具体地说,客户端到服务器(反之亦然)的实时通信将如何发生?
假设客户端用 C 编码,如何将 C 集成到(我想 PhP-framed)浏览器 window 中?
请注意,客户端永远不会下载到用户的 PC 上,那么它位于何处?
很抱歉,如果这些问题很多,如果答案太繁琐而无法撰写,请随意留下一些文档或教程(我一直在寻找但还没有真正找到)能够找到),我会很乐意自己阅读它们。提前致谢。
一方面你的问题太宽泛,但另一方面我可以给你一些关于如何以现代方式做到这一点的建议:
- 没有客户端,只有浏览器中的一个页面
- 使用 HTML5 canvas,您可能还想查看 SPA(单页应用程序)
- 通过 websocket 连接,服务器端有 HTML5 javascript 实现和 PHP 或 node.js
- 最好在服务器上使用node.js,PHP太麻烦
- 通过 websocket,发送和接收 JSON 个对象
- 在其原生平台上托管 node.js (Linux)
- 您可能希望将 Phaser 视为 HTML5 客户端 canvas 渲染框架,但它缺少很多功能并且主要面向基于 twitch 的动作游戏,由于滞后
,因此可以很好地使用此架构
这会让您得出一个结论:javascript 是该系统的中心。你会遇到几个障碍,例如:
- 使用 SSL 登录的 websockets 的安全性
- 避免使用 SSL 获取实时数据(1 Hz 以上)
- UI on the client inside canvas 不容易实现,你得重新造轮子或者找个UI库
- 预计会有延迟,相对于使用 TCP/IP 或 UDP(Lidgren?)和 protobuf(Lidgren+protobuf)的本机 C/C# 代码,网络代码将占用 20%-30% 的开销是高频 AAA 游戏使用的内容(MMORPG 或 FPS 类似)
从您提出的问题中,我感觉到对该领域的理解和知识严重缺乏。我猜你必须提前学习 6-12 个月以上。这是我的建议,因为如果你马上开始,你会犯很多错误并浪费你的时间。如果上面有什么你不知道的名字,请搜索并好好研究。不要开始编码,前面有一条非常陡峭的学习曲线!
编辑:关于服务器端的更多信息
如果您想实现基于动作的互动游戏(例如 FPS 或 2D 射击游戏),我必须告诉您。
您可能想研究 Unity 3D,直接使用 TCP/IP 连接和二进制消息(没有 HTTP,没有 websocket,而是 protobuf)。
C#(客户端)和 node.js(服务器端)是一个很好的组合。对于水平扩展,您可能需要研究云计算、docker、供应和大量服务器安全性。
但这是一个充满敌意的地形,它会将您带入 DevOps 领域,这与游戏开发相去甚远。更像是建筑师的工作。想象一下,3 层系统(客户端+服务器+数据库)在服务器上有瓶颈。
您想生成更多节点来处理更多客户端。这是每个基于大厅的游戏(LoL、Overwatch、WoT、WoW 实例等)以及您对分区地图(例如 LOTRO、RIFT 和更多 MMORPGS 中的 "maps")所做的事情。此外,镜像(这意味着同一地图的多个实例以容纳人口过多的人群)。
要进行这种横向扩展,您的服务器必须 online/offline 自行运行,而无需您点击命令和控制(例如 puppet 和类似软件)。
虽然这是最终的方法,但它的学习曲线也是最陡峭的,尤其是因为 安全性 (广告 DDOS、洪水、慢懒猴、假客户端和列表继续)。一个新节点必须 "provisioned" 在连接到集群并上线之前处于运行状态(例如 cloud-config),因此这是一个充满痛苦和学习的全新世界。
这种基于云的弹性服务器系统的核心是 SSO(单点登录)。
所以,假设有一个游戏由一个网站和一个可以从该网站启动的客户端组成。我看了一下,一个相关的例子是哈宝酒店。
我要问的是,让这样的游戏运行的所有不同部分是什么:对于网站部分,我想象一个服务器、一个数据库和一些 HTML,CSS 和 PhP 需要编码,但客户端如何操作?
更具体地说,客户端到服务器(反之亦然)的实时通信将如何发生? 假设客户端用 C 编码,如何将 C 集成到(我想 PhP-framed)浏览器 window 中? 请注意,客户端永远不会下载到用户的 PC 上,那么它位于何处?
很抱歉,如果这些问题很多,如果答案太繁琐而无法撰写,请随意留下一些文档或教程(我一直在寻找但还没有真正找到)能够找到),我会很乐意自己阅读它们。提前致谢。
一方面你的问题太宽泛,但另一方面我可以给你一些关于如何以现代方式做到这一点的建议:
- 没有客户端,只有浏览器中的一个页面
- 使用 HTML5 canvas,您可能还想查看 SPA(单页应用程序)
- 通过 websocket 连接,服务器端有 HTML5 javascript 实现和 PHP 或 node.js
- 最好在服务器上使用node.js,PHP太麻烦
- 通过 websocket,发送和接收 JSON 个对象
- 在其原生平台上托管 node.js (Linux)
- 您可能希望将 Phaser 视为 HTML5 客户端 canvas 渲染框架,但它缺少很多功能并且主要面向基于 twitch 的动作游戏,由于滞后 ,因此可以很好地使用此架构
这会让您得出一个结论:javascript 是该系统的中心。你会遇到几个障碍,例如:
- 使用 SSL 登录的 websockets 的安全性
- 避免使用 SSL 获取实时数据(1 Hz 以上)
- UI on the client inside canvas 不容易实现,你得重新造轮子或者找个UI库
- 预计会有延迟,相对于使用 TCP/IP 或 UDP(Lidgren?)和 protobuf(Lidgren+protobuf)的本机 C/C# 代码,网络代码将占用 20%-30% 的开销是高频 AAA 游戏使用的内容(MMORPG 或 FPS 类似)
从您提出的问题中,我感觉到对该领域的理解和知识严重缺乏。我猜你必须提前学习 6-12 个月以上。这是我的建议,因为如果你马上开始,你会犯很多错误并浪费你的时间。如果上面有什么你不知道的名字,请搜索并好好研究。不要开始编码,前面有一条非常陡峭的学习曲线!
编辑:关于服务器端的更多信息
如果您想实现基于动作的互动游戏(例如 FPS 或 2D 射击游戏),我必须告诉您。
您可能想研究 Unity 3D,直接使用 TCP/IP 连接和二进制消息(没有 HTTP,没有 websocket,而是 protobuf)。
C#(客户端)和 node.js(服务器端)是一个很好的组合。对于水平扩展,您可能需要研究云计算、docker、供应和大量服务器安全性。
但这是一个充满敌意的地形,它会将您带入 DevOps 领域,这与游戏开发相去甚远。更像是建筑师的工作。想象一下,3 层系统(客户端+服务器+数据库)在服务器上有瓶颈。
您想生成更多节点来处理更多客户端。这是每个基于大厅的游戏(LoL、Overwatch、WoT、WoW 实例等)以及您对分区地图(例如 LOTRO、RIFT 和更多 MMORPGS 中的 "maps")所做的事情。此外,镜像(这意味着同一地图的多个实例以容纳人口过多的人群)。
要进行这种横向扩展,您的服务器必须 online/offline 自行运行,而无需您点击命令和控制(例如 puppet 和类似软件)。
虽然这是最终的方法,但它的学习曲线也是最陡峭的,尤其是因为 安全性 (广告 DDOS、洪水、慢懒猴、假客户端和列表继续)。一个新节点必须 "provisioned" 在连接到集群并上线之前处于运行状态(例如 cloud-config),因此这是一个充满痛苦和学习的全新世界。
这种基于云的弹性服务器系统的核心是 SSO(单点登录)。