实时多人游戏的Javascript和PHP?[关闭]


13

我想知道将Javascript客户端与PHP / mysql服务器端相结合对于HTML5实时多人(小型)浏览器游戏是否是一个好主意?

我的技术知识非常有限,即使我将来打算学习node.js,现在的学习难度也很大。

因为我已经熟悉PHP,所以我认为它的运行速度会更快。

我当时认为的规模是2-8位玩家。并尝试使客户端到服务器的消息计数尽可能少。

我打算存储/处理的值是:

  • 玩家名称和ID。
  • X和Y位置。
  • 健康。
  • 配备的物品(最多8个插槽,可能更少)。
  • 动作(步行,攻击,使用等,但一次只能有1个动作/玩家)。
  • 项目符号X,Y坐标和轨迹。
  • 公会/氏族名称。
  • 以及一些基本的聊天/邮件功能。

我的猜测是,即使这不是最佳解决方案,但只要我保持逻辑小,这是完全可行的。我对吗?


4
听起来完全可行。你为什么不试试呢?最坏的情况是,您花一些时间学习,最好的情况下,您将获得所需的东西。
William Mariager

1
是的,但我想这会花一些时间,而且我不喜欢浪费时间,所以才在这里问。=)
justanotherhobbyist 2012年

8
如果您学到了什么,时间就不会浪费。;)值得考虑的事情是,如果您切换语言,则将花费时间学习新语言并同时学习网络,这意味着需要进行更多调试才能找到问题所在。如果您坚持使用已知的知识,则将首先学习网络,然后在发现网络效率低下时将其移植,然后下次有人问类似的问题时,您将知道正确的答案,因为您已经对其进行了测试。
William Mariager

1
那实际上是一个好点
justanotherhobbyist'July 31''12

Answers:


12

对于实时游戏,您希望最小化延迟。这是实现此目标的两个技巧,其中包含有关PHP和Node的注释:

  1. 使用WebSockets。它们允许服务器和客户端之间的快速双向通信。在此处使用node.js的优势在于,您可以在管道的两端使用相同的JavaScript API。还有一个很棒的用于node.js的socket.io模块,它为不支持WebSockets的较小的浏览器提供后备技术。仔细研究一下,看来如果您确实愿意,也可以使用PHP中的WebSockets。
  2. 不要将数据库包含在时间紧迫的数据中,例如快速移动的对象的坐标。这意味着将它们保留在内存中,这并不是特别适合于传统的PHP使用模型,该模型对于每个要发送的请求(或任何Web服务器)都触发一次,但是您也可以独立启动PHP服务器应用程序。我猜想,带有V8内核的Node会比PHP快。这是否是一个问题,取决于游戏的要求和服务器的功能。

我自己发现node.js非常容易上手,并且由于您仍然需要编写大量JavaScript代码,因此建议您尝试一下。至少快速浏览一下socket.io教程,以了解建立实时通信通道的重要性


对于第2点+1。您可能会犯的最大错误是期望MySQL查询在每个事件上触发。您可以采取任何措施将游戏数据从HDD移出。为此,我成功地滥用了Memcached。毫无疑问,还有其他方法。
DampeS8N 2012年

是的,我真的很想学习节点,但是我甚至还没有从cmd入手,开发人员犯的最大错误是使它很难进入。Windows版Atleast现在带有安装程序,如果我找到一个不错的教程,请尝试一下。
justanotherhobbyist 2012年

节点一点也不难启动或使用。是的,比PHP更难,但是,PHP为其便利性付出了惨痛的代价-使其可以嵌入到Apache中并且默认情况下在没有配置的情况下默认情况下嵌入的设计也会导致很多问题,这些问题使PHP完全成为绝对的最差选择。可以制作实时游戏后端。节点,Python,Ruby,Java等都需要您设置应用程序服务器,但是这种模型允许高度可伸缩的事件驱动的内存中处理,这在PHP中实际上是不可能实现的。
肖恩·米德迪奇

1

与Tapio的答案一起,我建议仅(如果可能)将用户输入(单击和键盘输入)发送到服务器,并让服务器和客户端模拟游戏。每隔N个滴答声,客户端就会要求服务器进行同步,服务器会回复客户端呈现游戏所需的所有信息,例如健康状况,物品等。这是为了确保客户端也不会失去同步许多。

当然,服务器和客户端都需要完全相同的游戏实现,因此这可能需要更多工作。如果您在客户端和服务器上都具有完美的实现,则客户端将需要较少地同步。

这将减少客户端/服务器消息传递,并减少延迟。这也将有助于防止作弊。

假设您正在用JavaScript创建此游戏,那么还可以使用NodeJS在JavaScript中编写后端。这样,您可以为服务器和客户端重用游戏的JavaScript实现。


0

我建议学习Nodejs。如果您现在已经有了Javascript,那就不会那么困难了。我使用Nodejs迅速制作了一个TRON Multiplayer游戏,这是我使用它的第一天。(哦,客户端是HTML5画布;其他评论中提到,我只是发送关键输入。)

看一下名为nowjs的模块。祝好运!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.