【问题标题】:Node.js cluster and socket.io with mongodb as store使用 mongodb 作为存储的 Node.js 集群和 socket.io
【发布时间】:2013-06-12 17:51:57
【问题描述】:
我在设置集群 node.js / socket.io 应用程序时遇到了问题,该应用程序带有 socket.io 存储,不是基于 Redis,而是基于 MongoDB。
我需要提一下,我的应用程序使用 Mongo 来存储数据。所以我不想设置另一个数据库只是为了让 soket.io 跨多个进程工作。
我找到了一个选项 - mong.socket.io,但看起来我无法使用节点集群进行此操作。
我正在使用 node: 0.10.10,与 socket.io: 0.9
我正在寻找任何可以让我使用 MongoDB 作为在不同进程上运行的 socket.io 的存储的解决方案。
指望你,谢谢。
【问题讨论】:
标签:
node.js
mongodb
socket.io
【解决方案1】:
任何集群工作者都可以使用 mongodb 或 mongoose 轻松访问 MongoDB 以获得所需的数据。它还可以在本地将该数据存储为缓存。
一旦 socket.io 客户端连接,它将绑定到其中一个工作人员,并且在执行期间不会交换工作人员。
为了共享会话,您需要为 socket.io 创建会话中间件,该中间件将向其中一名工作人员询问来自 MongoDB 的会话详细信息。检查this 答案,它解释了如何从共享会话详细信息访问 socket.io 中的会话数据。并且为了使其集群化,而不是 MemoryStorage 使用 connect-mongo 允许在 mongo 中存储会话数据,它将使会话详细信息在工作人员之间共享。