Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/462.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
(PHP、Javascript、AJAX、Node.js、MYSQL)短轮询VS长轮询VS WebSocket_Javascript_Php_Node.js_Ajax_Socket.io - Fatal编程技术网

(PHP、Javascript、AJAX、Node.js、MYSQL)短轮询VS长轮询VS WebSocket

(PHP、Javascript、AJAX、Node.js、MYSQL)短轮询VS长轮询VS WebSocket,javascript,php,node.js,ajax,socket.io,Javascript,Php,Node.js,Ajax,Socket.io,这将是一个相当长和复杂的调查,包括一个以上的问题,所以请容忍我在这里 我对网络开发还比较陌生,目前正在开发一款基于反射的在线多人浏览器游戏,玩家可以使用WASD键控制并与化身战斗。由于其基于反射的特性,玩家在不超过几毫秒的延迟内获得敌人行动的实时更新是有害的 太长了,读不下去了。 然而,我最近才发现WebSocket和socket.io的概念。我知道这很可能是构建它的最佳方法,但是我不熟悉node.js,我已经用PHP构建了我游戏的核心(注册、布局、数据库管理、排队寻找玩家等等),这意味着,如果

这将是一个相当长和复杂的调查,包括一个以上的问题,所以请容忍我在这里

我对网络开发还比较陌生,目前正在开发一款基于反射的在线多人浏览器游戏,玩家可以使用WASD键控制并与化身战斗。由于其基于反射的特性,玩家在不超过几毫秒的延迟内获得敌人行动的实时更新是有害的

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

(直截了当地说:) 我已经编写了短轮询和长轮询代码:

  • 在我的简短轮询代码中,客户机每30毫秒发送一个AJAX请求,从数据库获取游戏会话,并检查客户机是否可以更新自己的坐标(一个客户机不能连续两次更新自己的坐标,只能在敌人完成后才更新,因此如果一个客户机有ping,则两个客户机的游戏都会延迟),并且每当他按下(或释放)WASD键时,就会发送一个AJAX请求,用他的动作更新数据库

  • 在我的长轮询代码中,客户机发送一个AJAX请求,请求更改对手的移动。服务器存储对手的当前移动,并在对手的移动保持不变时陷入while循环,不断查询MYSQL以查找任何新的移动。一旦客户机按下(或释放)一个键,他们就会发送一个带有坐标和新移动的AJAX请求,在此基础上更新数据库,另一个客户机的while循环被中断,服务器会将移动客户机的新状态以及坐标返回给侦听客户机(考虑到其他客户端在等待过程中可能遇到的任何可能的延迟,这可能会导致他们的敌人的坐标出现差异)。同时,游戏将以纯Javascript为两名玩家运行

  • 这两种选择听起来是否会让服务器过度紧张?我应该绝对使用socket.io来运行这样一个具有可接受的服务器流量的游戏,还是我可以坚持使用PHP?我可以使用socket.io+PHP后端与web托管提供商一起使用而不出问题吗


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

    在高度优化的本机代码中,开放互联网上的毫秒延迟已经够难了,在浏览器中使用Javascript是相当困难的。任何额外的毫秒都会浪费在从数据库来回访问上se只会让事情变得更糟。你绝对希望服务器纯粹在内存中运行,并立即将数据推送到套接字。这基本上可以用任何语言实现,包括PHP,但它的应用程序结构与典型的PHP MySQL页面略有不同,在典型的共享主机上根本无法工作。我明白了。你会怎么做那么你推荐;我有什么选择?使用websockets构建我的游戏并在个人计算机上托管?我不能建议你在哪里托管它,有很多选择。可能所有这些都在你的舒适区之外,你可能需要学习一两件关于服务器管理的事情,但这都是可行的。