html - PHP 共享主机上的 WebSockets

标签 html websocket phpwebsocket

我一直在研究显示“在线用户”计数器的最佳方式,该计数器更新为秒,试图避免连续的 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/

相关文章:

node.js - 使用 NodeJS 的简单 WebSocket 应用程序

javascript - Socket.io 聊天服务器不提供 SSL 证书

php - 如何修复 Websocket 握手代码?

php - 从 PHP 脚本向多个 Ratchet Websocket 应用程序发送消息(通过 ZMQ Socket)

jquery - 在 <ul> 列表中包含 jquery 进度条的 div

html - 仅为移动设备更改 CSS?

android - CSS div 覆盖标签在桌面版 Chrome 中运行良好,但在 Android 版 Chrome 中运行不佳

c# - 在外部站点中自动进行字段输入

http - 为什么 websocket 需要使用 HTTP 打开握手?为什么它不能是一个独立的协议(protocol)?

javascript - Websockets - 获取数据(轮询?)