原来这不是Node.js / Socket.io的问题,我只是用完全错误的方式来解决它。
我不仅从Node / Socket堆栈外部发布到Redis服务器,而且仍然直接订阅Redis频道。在发布/订阅情况的两端,我都绕过了“后端带有Redis存储的Socket.io群集”的优点。
因此,我创建了一个小应用程序(使用Node.js / Socket.io / Express),该应用程序从Rails应用程序中接收消息,并使用socket.io- announce模块将其“宣布”到Socket.io房间中。现在,通过使用Socket.io路由魔术,每个节点工作人员将仅获取消息并将消息发送到直接与其连接的浏览器。换句话说,由于pub和sub都发生在Node.js / Socket.io堆栈中,因此不再有重复的消息。