我一直在研究显示“在线用户”计数器的最佳方式,该计数器更新为秒,试图避免连续的 ajax 轮询。
显然 WebSockets 似乎是最好的选择。由于这是一个 Intranet,我将要求使用 Chrome 或 Safari,因此不应该存在兼容性问题。
自从我刚接触 WebSocket 以来,我一直在阅读一些有关 WebSocket 的文章,并且我认为我非常了解它的工作原理。
我不太确定如何用 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 向这些在线用户广播登录用户的数量。有人可以帮助我或向我指出如何实现这一目标的更好信息吗?
谢谢
最佳答案
即使在专用托管上,Websockets 也需要很多东西,抛开共享托管。
对于您的要求,服务器发送事件(sse)是正确的选择,因为只有服务器才会将数据推送到客户端。
SSE可以简单地调用服务器脚本,非常类似于ajax,但是客户端将接收并能够在数据传入时部分地处理数据。每当有数据传入时就会生成Dom事件。
但是 IE 即使在版本 10 中也不支持 SSE。因此对于 IE,您必须使用一些后备技术,例如“foreever iframe”。
就托管而言,普通的共享托管(以及那些不是很便宜的托管)将允许 php 脚本长时间运行,只要它们不被视为问题即可。
关于html - PHP 共享主机上的 WebSockets,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9371066/