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

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

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

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

为此,我使用socket.io安装了node.js。 我的socket.io服务器正常运行,客户端在页面加载时自动连接。

我在挣扎的地方是在理解如何从我的PHP应用程序发布消息到socket.io。 由于PHP和node.js不能直接通信,因此我的理解是,由于我已经安装并运行了Redis,所以我最好使用Redis作为中介。 但是我不知道如何去做这件事。

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

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

提前致谢。

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

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

Redis不提供内置websocket或http服务器,所以我们必须将其与php或node.js集成以便stream式传输通道数据。 使用Tweak方法,我们可以将redis服务器与php连接起来,使用preis php库for redis,其中php会将数据推送到Redis中,socket.io将跟踪新的消息并将其传送给Redis服务器,时间。

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