繁体   English   中英

使用Redis在PHP和socket.io/node.js之间进行通信

[英]Using Redis to communicate between PHP and socket.io/node.js

我在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如何知道要发送到哪个客户端。 我如何传递这些信息并保持一致? 这甚至是必要的吗? 我是否需要在Redis中存储我的PHP会话并让socket.io在用户连接时收集数据? 或者还有另一种方式吗?

提前致谢。

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

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

Redis不提供内置的websocket或http服务器,所以我们必须将它与php或node.js集成,以便流式传输通道数据。 使用Tweak方法,我们可以使用用于redis的predis php库连接Redis服务器和php,其中php将数据推送到Redis,socket.io将跟踪推送到Redis服务器的新消息并将其发送回与实际连接的用户时间。

https://github.com/u-day/tweak/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM