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: PHP
或Content-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的主要内容,如果未能解决你的问题,请参考以下文章
通过nodejs在共享cpanel主机上实现websocket服务器
网络编程WebSocket 和socketHTTP的区别和联系