Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/73.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 HTML5-共享主机中的WebSocket_Php_Html_Websocket - Fatal编程技术网

Php HTML5-共享主机中的WebSocket

Php HTML5-共享主机中的WebSocket,php,html,websocket,Php,Html,Websocket,我曾经有一个小的聊天应用程序(几乎可以正常工作),它使用PHP、jQuery和MySQL。用户数量非常小(只有我的朋友使用它)。为此,我使用了长轮询方法 现在,我正在考虑使用HTML5WebSockets来实现这一点,因为它效率更高。而且我的大多数朋友都在使用谷歌浏览器(已经支持HTML5)。我已经阅读了一些关于HTML5WebSocket的教程。我已经从github下载了。我已经看过密码了。但是自述文件说,侦听传入连接的PHP页面应该使用命令行中的“PHP-q”运行。所以,我搜索了这个“q”标

我曾经有一个小的聊天应用程序(几乎可以正常工作),它使用PHP、jQuery和MySQL。用户数量非常小(只有我的朋友使用它)。为此,我使用了长轮询方法

现在,我正在考虑使用HTML5WebSockets来实现这一点,因为它效率更高。而且我的大多数朋友都在使用谷歌浏览器(已经支持HTML5)。我已经阅读了一些关于HTML5WebSocket的教程。我已经从github下载了。我已经看过密码了。但是自述文件说,侦听传入连接的PHP页面应该使用命令行中的“PHP-q”运行。所以,我搜索了这个“q”标志会做什么。我发现它以安静模式运行页面。那么,当我在安静模式下运行时,发生了什么?它会无休止地运行吗?这个正在运行的进程会影响系统资源吗

这个PHP页面应该一直运行。然后,只能接受连接。不是吗

我有一个与HostGator共享的主机包。他们也允许cron工作。我现在的聊天应用程序(使用长轮询方法)将所有消息插入数据库。当用户轮询时,它将搜索数据库中的任何新消息,然后输出它们(如果有的话)


所以,我有点被困在这里了(

它应该从命令行运行,因为正如您所怀疑的,它打算无休止地运行。它绑定到服务器上的套接字并侦听传入的连接。它无法从浏览器可靠地运行

“-q”选项告诉它不要输出任何浏览器标题,例如
X-Powered-By:PHP
Content-Type:text/html

只要PHP运行,它将消耗PHP所需的内存。在没有客户端的情况下启动时,您的内存占用将因配置而异。连接的客户端越多,您将使用的cpu、内存和套接字描述符越多。它使用select,因此可以高效地处理套接字

此外,由于您使用的是共享主机,您可能无法使用它,因为您的用户很可能无法绑定到端口并侦听连接

正如您在演示中所看到的,连接WebSocket的URL是
ws://localhost:12345/WebSocket/server.php
。除非您有一个能够使用WebSocket的Web服务器,否则您必须运行类似phpWebSocket的东西,它充当服务器并在80以外的端口上侦听


希望这会有所帮助。

HostGator的共享主机包不允许客户端绑定到本地端口以进行传入。这可能是问题的一部分


可能是您可以使用CronJob启动命令行,

还有一个问题:我们如何将会话与此WebSocket一起使用?或者在这种情况下不可能?我的意思是,我想存储有关用户的特定数据。或者说一些验证签名。是否可以为此使用会话?或者在User class:?据我所知,在这种情况下,您将无法使用与websocket的会话。由于浏览器只是连接到服务器上的套接字,因此没有cookie或会话功能。一旦websocket连接,您可能可以发送某种登录序列(可能是会话cookie中的会话id)在websockets进一步集成到Apache/PHP之前,我认为您必须提出自己的解决方案。请参阅