【发布时间】:2016-10-02 05:44:15
【问题描述】:
所以我目前有一个运行 NodeJS 的聊天系统,它通过 rabbit 传递消息,每个连接的用户都有自己独特的队列,订阅并只收听消息(仅限他们)。后端还可以使用此聊天管道来传达其他系统消息,例如通知/好友请求和其他用户事件驱动的信息。
目前,即使对于 1000 个用户来说,消息的有效负载相同,后端也必须逐个循环并发布每个用户的每条消息。我想摆脱这种情况,能够将相同的消息发送给多个不同的用户,但不是 EVERY 连接的用户。
(例如:通知某些用户他们的朋友已经上线)。
我考虑实现一个兔子队列系统,其中所有消息都汇集到同一个队列中,而不是兔子发送所有用户队列节点接收这些消息并通过套接字连接将消息发送给适当的用户(给在线的人)。
这样,后端不需要为 100 和 1000 名用户循环,并且可以发送包含该消息应该发送到的所有用户的单个有效负载。我确实计划将 nodejs 服务器集群在一起。
我也想知道,因为我从未在生产环境中这样做过,我是否需要跟踪每个 socketID。
到目前为止我发现的潜在缺陷:
- 速度较慢,因为 1000 条消息可以堆积在一个队列中。
- 手动存储套接字 ID 以手动传输给用户。
- 将路由卸载到 NodeJS 而不是 RabbitMQ
以前有人做过这样的事吗?如果是这样,你有什么建议。使用用户唯一队列进行扩展,还是将所有用户的所有分组消息集中到更小(但更大的池)队列中更好。
【问题讨论】:
-
基础架构图用什么软件?
标签: node.js sockets rabbitmq chat cluster-computing