【发布时间】:2012-02-21 01:52:30
【问题描述】:
我一直在研究显示“在线用户”计数器的最佳方式,该计数器已更新为第二个,以避免持续的 ajax 轮询。
显然 WebSockets 似乎是最好的选择。由于这是一个 Intranet,我将要求使用 Chrome 或 Safari,因此不应该存在兼容性问题。
自从我刚接触 WebSockets 以来,我一直在阅读一些关于 WebSockets 的文章,我想我非常了解它的工作原理。
我不太确定如何用 PHP 实现它。 Node.js 似乎是这样做的自然选择,因为它具有“始终运行”的特性,但这不是一个选择。
为什么我最困惑的是 PHP 运行并且当它完成时它结束的事实。如果PHP结束了,socket连接不会丢失吗?或者如果 php 重新运行,它会通过 ip 回溯用户? (我觉得不太可能)
然后我找到了这个库 http://code.google.com/p/phpwebsocket/ 但它似乎有点旧(它提到只有 Chrome nightly 与 WebSockets 兼容)
在某一点上说“从命令行,运行 server.php 程序以侦听套接字连接。”这意味着我需要 SSH,这是许多共享主机计划所没有的。
我的另一个疑问是该库的源代码中的另一行:
set_time_limit(0);
这是否意味着 php 文件将连续运行?这允许在共享主机中吗?据我所知,所有主机都会在超时 1 o2 分钟后杀死 php。
我有一个在线用户的 mysql 表,我想使用 PHP 通过 websocket 向这些在线用户广播登录用户的数量。有人可以帮助我或向我指出如何实现这一目标的更好信息吗?
谢谢
【问题讨论】:
-
web-sockets 很受欢迎,但如果您可以使其工作,服务器发送的事件可能更适合您的目的。 SSE 显然可以在带有 JS 的旧浏览器中支持,而 websockets 则不是,而且您似乎不需要双向通信。我正在尝试解决 PHP SSE 问题:stackoverflow.com/questions/9070995/…
-
我没有任何兼容性问题,因为我可以控制所使用的浏览器,而且我对 WebSockets 很感兴趣,因为我已经看到它在 trello.com 上运行,而且它的运行方式很迷人
-
我建议您不要尝试将 PHP 用于有状态应用程序,因为 PHP 最初就是为此类应用程序设计的。正如您所指出的,共享主机也可能会阻止打开任意套接字。最好的办法是拥有自己的 VPS 服务器lowendbox.com
-
我刚刚尝试了与您描述的完全相同的设置,Juan... 我有一个共享 PHP 主机,可以通过 SSH 访问,但是客户端 WebSockets 没有连接到端口 12345 上正在运行的服务器。我我很确定共享主机有防火墙并阻止所有端口不是 80。
标签: html websocket phpwebsocket