php - PHP 中(跨平台)实时数据流的最佳方法?

标签 php javascript push

我一直想知道如何使用 PHP 进行“真正的”(半)实时数据流。

可能的应用:聊天室、拍卖、游戏等

“真”是指数据不仅写入某处并连续轮询,而且实际上以某种方式流式传输到客户端。

所谓“半”,我的意思是如果只有从服务器到客户端的流是实时的,而从客户端到服务器的消息不是实时的就可以了。

对于客户端和服务器之间的通信,我想坚持使用纯 HTTP (AJAX) 而不是其他一些协议(protocol)。

通过手动刷新输出缓冲区,可以使用 HTTP 流式传输到客户端。

问题是在服务器端将该脚本连接到什么?

连接后,进行阻塞读取,而不是轮询更改。

共享内存 (shmop) 扩展可以工作,但它不是跨平台的。

也许 memcached 可以工作?但我不确定是否有办法进行阻塞读取,所以它又归结为轮询 - 虽然我确定 memcached 非常快,但我只是不喜欢连续轮询的想法。

有什么想法吗?

最佳答案

PHP 不太适合实现实时数据流。 PHP 非常慢,并且不是为构建多线程应用程序而设计的。您最好使用 Python 或 Java 等语言实现一个完整的套接字服务器。

也就是说,我强烈建议您查看 NodeJS: http://nodejs.org/

它使用基于异步事件的 I/O 模型,而不是让线程阻塞在事件循环中。 NodeJS 服务器是用 Javascript 编写的。 NodeJS 速度快、可扩展且学习曲线低。

客户端将使用长轮询 Ajax 请求连接到 NodeJS HTTP 服务器。 PHP 可以直接连接到 NodeJS 并推送通知。或者 PHP 可以写入消息队列、数据库、内存缓存等,NodeJS 将轮询这些数据存储以获取更新,并向客户端发送新消息。

在轮询更新时,您可能需要编写自己的守护进程来充当从 NodeJS 到 MySQL、memcached 等的过渡。 NodeJS 将使用守护进程保持套接字打开。守护进程将轮询数据存储以获取更新,并将更新发送到 NodeJS。然后,NodeJS HTTP 服务器会将这些更新发送给客户端。

请参阅本教程以实现实时 Twitter 流: http://net.tutsplus.com/tutorials/javascript-ajax/learning-serverside-javascript-with-node-js/

关于php - PHP 中(跨平台)实时数据流的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4495749/

相关文章:

php - 在 PHP 中获取网站的根 url

php - 在 woocommerce 旁边添加图标添加到购物车按钮

php - YouTube 数据 API 调用 GET [URL] 时出错 : (500) Backend Error

php - 如何使用多列的like查询

javascript - 如何在同一页面中将数据从javascript传递到php

javascript - 下次访问时恢复动态内容中的阅读位置

javascript - 数组中所有其他数字的乘积

javascript - 从 javascript 正确添加到 json

javascript - 如何在 JavaScript/Jquery 中切片已经存在于另一个数组中的数组元素

javascript - 当网站关闭时,推送通知如何在每个浏览器上工作?