(PHP,Javascript,AJAX,Node.js,MYSQL)短轮询VS长轮询VS网络套接字

时间:2018-07-09 10:18:59

标签: javascript php node.js ajax socket.io

这将是一个相当漫长而复杂的查询,其中包含多个问题,因此请在这里接受。

我是Web开发的新手,目前正在开发基于反射的在线多人浏览器游戏,在该游戏中,玩家可以使用WASD键来控制化身并与化身进行战斗。由于其基于反射的特性,因此玩家获得的敌人动作实时更新的延迟不超过几毫秒,这是有害的。

(对于TL; DR请勿阅读此段落。)

但是,我直到最近才发现websockets和socket.io的概念。我知道这很可能是构建它的最佳方法,但是我对node.js并不熟悉,并且我已经在PHP中构建了游戏的核心(注册,布局,数据库管理,排队寻找玩家) ,等等。),这意味着如果我要实现websocket,我不仅需要学习一种全新的技术,而且还需要重写其中的整个后端……或者,我可以同时使用PHP和node.js,但我会必须在一个非常尴尬的端口上打开我的node.js(因为xampp已经使用了80和443),这可能给许多潜在用户带来不便。此外,我计划使用网络托管服务提供商,但不确定他们是否会支持。 (会吗?这是一个大问题吗?)

(直指:) 我已经写了短轮询和长轮询代码:

  1. 在我的短轮询代码中,客户端每30毫秒发送一次AJAX请求,该请求从数据库中获取游戏会话,并检查客户端是否可以更新自己的坐标(客户端无法两次更新坐标)。仅在敌人完成攻击后才连续进行,因此,如果一个客户端进行ping操作,则两个客户端的游戏都会变得迟钝),并且每当他按下(或释放)WASD键时,都会发送AJAX请求以使用其动作来更新数据库

  2. 在我的长轮询代码中,客户端发送AJAX请求,要求其对手的动作发生变化。服务器存储对手的当前动作,并在对手的动作保持不变的同时陷入一个while循环,并不断向MYSQL查询任何新动作。一旦客户端按下(或释放)一个键,他们就会发送一个AJAX请求及其坐标和新动作,此后将更新数据库,另一个客户端的while循环中断,服务器将正在移动的客户端的新代码返回给侦听客户端状态及其座标(以考虑其他客户在等待时可能经历的任何可能的延迟,这可能导致其敌人的座标出现差异)。同时,该游戏可以使用纯Javascript面向两个玩家运行。

这两种选择听起来是否会使服务器承受太大压力?我应该绝对使用socket.io来以可接受的服务器流量运行这样的游戏,还是我可以坚持使用PHP?我可以同时使用socket.io和PHP后端与虚拟主机提供商一起使用吗?

我知道,如果我的问题太长/太含糊,我会问很多事情,并提前道歉。感谢大家的投入!

0 个答案:

没有答案