2

我一直在研究显示“在线用户”计数器的最佳方式,该计数器已更新到第二个,试图避免连续的 ajax 轮询。

显然,WebSockets 似乎是最好的选择。由于这是一个 Intranet,我将要求使用 Chrome 或 Safari,因此不应该存在兼容性问题。

我一直在阅读一些关于 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 向这些在线用户广播登录用户的数量。有人可以帮助我或向我指出如何实现这一目标的更好信息吗?

谢谢

4

1 回答 1

2

即使在专用主机上,Websockets 也需要很多东西,除了共享主机。

对于您的要求,服务器发送事件 (sse) 是正确的选择,因为只有服务器会将数据推送到客户端。

SSE 可以简单地调用服务器脚本,很像 ajax,但是客户端将接收并能够在数据进入时部分处理。每当有数据进入时,都会生成 Dom 事件。

但是 IE 即使在版本 10 中也不支持 SSE。因此对于 IE,您必须使用一些后备技术,例如“永远 iframe”。

就托管而言,普通的共享托管(以及那些不是很便宜的)将允许 php 脚本运行很长时间,只要它们不被视为问题。

于 2013-03-08T09:50:52.033 回答