2012-02-21 109 views
2

我一直在做一些研究,以显示“用户在线”计数器的最佳方式,更新到第二个尝试避免连续的Ajax轮询。PHP共享主机上的WebSockets

显然WebSockets似乎是最好的选择。因为这是一个内联网,所以我会让它成为使用Chrome或Safari的必要条件,所以不应该存在兼容性问题。

我一直在阅读一些关于WebSockets的文章,因为我是新手,我想我非常了解它是如何工作的。

我不是很确定如何用PHP实现它。 Node.js似乎是自然的选择,因为它的“始终运行”性质,但这不是一个选项。

为什么我最困惑的是PHP运行的事实,当它完成时,它结束。如果PHP结束,套接字连接不会丢失?或者,如果PHP重新运行它会回看用户的IP? (我不认为这有可能)

然后我发现这个库 http://code.google.com/p/phpwebsocket/ ,但它似乎是一个小老头(仅提及铬是夜间使用WebSockets兼容)

在一个点上说:“从在命令行中运行server.php程序来侦听套接字连接。“这意味着我需要SSH,许多共享托管计划没有。

我还有一个疑问是该库的源这个其他行:

set_time_limit(0); 

这是否意味着PHP文件将连续运行?这是允许共享主机?从我知道的所有主机在1分钟2分钟超时后杀死php。

我有一个与在线用户的MySQL表,我想使用PHP通过websocket向用户登录到这些在线用户的数量。有人可以帮助我,或者在有更好的信息的地方指出我可以实现的目标吗?

感谢

+0

网络套接字非常受欢迎,但如果可以使其发挥作用,服务器发送的事件可能更适合您的目的。 SSE显然可以在JS的旧版浏览器中支持,而websocket不支持,而且你似乎不需要双向通信。我试图通过PHP SSE问题在这里工作:http:// stackoverflow。com/questions/9070995/html5-server-sent-events-prototyping-ambiguous-error-and-repeated-polling – tomfumb 2012-02-21 02:07:12

+0

我没有任何兼容性问题,因为我可以控制使用的浏览器,并且我对WebSockets感兴趣,已经看到它在trello.com上的工作,它的作品像魅力 – Juan 2012-02-21 03:22:01

+3

我建议你不要尝试使用PHP的有状态应用程序,因为PHP首先是为此设计的。正如您所指出的,共享主机可能会阻止打开任意套接字。您最好的选择是获得您自己的VPS服务器http://www.lowendbox.com/ – 2012-02-21 06:25:47

回答

2

的WebSockets将需要大量的事情即使在专门的托管,抛开共同主办。

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

SSE可以简单地调用服务器脚本,非常像阿贾克斯,但客户端将接收并能够通过部分处理的数据部分,因为它的用武之地。DOM事件会产生每当一些数据的用武之地。

但即使在版本10中,IE也不支持SSE。因此,对于IE,您必须使用某种后备技术,比如“foreever iframe”。

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