php - 使用 Redis 实现 PHP 与 socket.io/node.js 的通信

标签 php node.js redis socket.io

我有一个在 Apache 上构建和运行的 PHP 应用程序,使用 Nginx 作为反向代理来提供静态资源。

我还安装了 Redis,我用它来存储每个用户事件流的事件 ID。事件被写入 MySQL 数据库,然后 Redis 将事件 ID 推送到每个用户流中。当用户收到他/她的事件流时,应用程序首先从 Redis 检索用户事件 ID 列表,然后通过 MySQL IN() 查询获取实际事件数据。

这一切都很好,但是我想开始为这个设置添加实时功能。我希望能够将这些事件直接推送到用户浏览器,并添加一般的实时通知。

为此,我安装了带有 socket.io 的 node.js。我已正确启动并运行 socket.io 服务器,并且客户端会在页面加载时自动连接。

我苦苦挣扎的地方在于了解如何从我的 PHP 应用程序中向 socket.io 发布消息。由于 PHP 和 node.js 不能直接通信,我的理解是我最好使用 Redis 作为中间人,因为我已经安装并启动并运行了它。但是我不知道该怎么做。

我需要的是从 PHP 发送通知到 Redis,然后发送到 socket.io 以便将其推送到相关客户端的过程的描述(任何代码示例都会非常有帮助)。

此外,我不明白 socket.io 如何知道要发送给哪个客户端。我将如何传递这些信息并保持一切同步?这甚至是必要的吗?我是否需要将我的 PHP session 存储在 Redis 中并让 socket.io 在用户连接时收集数据?还是有别的办法?

提前致谢。

请注意:我的 PHP SESSION 数据当前已保存到磁盘。

最佳答案

您可以在 Redis 上设置 pubsub channel (请参阅 http://redis.io/topics/pubsub )。然后从您的 node.js 进程订阅它。然后,您的 PHP 将发布到 pubsub 以与 Node 通信。您可以为不同的客户提供单独的 pubsub channel ,并发布到您需要的任何 channel 以覆盖您的特定客户。

关于php - 使用 Redis 实现 PHP 与 socket.io/node.js 的通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16480962/

相关文章:

javascript - 在 Nodejs 中连接 JSON 对象

node.js - 使用 Redis 存储来自 neo4j 的查询结果

mongodb - 基于文档和基于键/值的数据库之间的区别?

coding-style - 在 REDIS 中引用其他对象的首选样式

php - PHP 5.6 和 7 之间 chr() 函数的差异

javascript - 在 JavaScript 中有效地计算对象的键/属性的数量

php - 如何停止在 jquery 中运行倒计时?

javascript - 错误: ENOENT: no such file or directory

php - 使用内置的 laravel 5.3 功能或 dingo 来创建 API?

php - 在 yii1 中添加带有参数的特定条件