HTML5 - 共享主机中的 WebSocket

Posted

技术标签:

【中文标题】HTML5 - 共享主机中的 WebSocket【英文标题】:HTML5 - WebSocket in shared hosting 【发布时间】:2012-01-21 05:06:36 【问题描述】:

我曾经有一个使用 php、jQuery 和 mysql 的小型聊天应用程序(几乎可以使用)。用户量很小(只有我的朋友使用)。我为此使用了长轮询方法。

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

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

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

所以,我有点卡在这里。 :(

【问题讨论】:

【参考方案1】:

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

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

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

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

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

希望对您有所帮助。

【讨论】:

还有一个问题:我们如何将 SESSIONS 与这个 WebSockets 一起使用?还是在这种情况下不可能?我的意思是,我想存储有关用户的特定数据。或者说一些验证签名。是否可以为此使用 SESSIONS ?或者在 User 类中创建单独的数据成员:github.com/esromneb/phpwebsocket/blob/master/… ? 据我所知,在这种情况下,您将无法使用带有 websocket 的会话。由于浏览器只是连接到服务器上的套接字,因此没有 cookie 或会话功能。一旦 websocket 连接(可能是会话 cookie 中的会话 ID),您就可以发送某种登录序列,然后您可以获取有关用户的一些信息。在 websockets 更多地集成到 Apache/PHP 之前,我认为您将不得不提出自己的解决方案。见***.com/questions/5353362/…【参考方案2】:

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

http://support.hostgator.com/articles/pre-sales-policies/socket-connections

【讨论】:

【参考方案3】:

也许你可以使用 CronJob 来启动命令行,

【讨论】:

以上是关于HTML5 - 共享主机中的 WebSocket的主要内容,如果未能解决你的问题,请参考以下文章

WebSocket 服务器支持

通过nodejs在共享cpanel主机上实现websocket服务器

网络编程WebSocket 和socketHTTP的区别和联系

Chrome 61 上 webworker 中的 HTML5 安全 websocket 连接

HTML5中的websocket

适用于 Android 的 phonegap 中的 WebSocket HTML5