我想检查一下我是否掌握正确的方法,可以使用pubsub来收集Node.js / socket.io环境中特定用户的通知。
这是我的设置:
我相信处理此问题的正确方法是为每个用户订阅一个通知通道。此通道包含每个用户的每条通知,只要我们执行上述任一操作,就会通过发布事件将其推送到该通道。然后,订阅检查此通道以查找与用户 session 有关的特定数据,即:
这是正确的方法吗?我对socket.io,node.js和pubsub相当陌生,但这对我来说似乎很有意义。让我烦恼的部分是,我们应该将事件推送到客户端,而不是客户端从服务器提取事件。此解决方案似乎兼有。
如果有一个更简单的解决方案(即socket.io更本地化的解决方案),我将不胜感激。在教程或示例中,我真正能找到的就是一遍又一遍的相同的聊天客户端文字...
编辑:另外,维护所有连接的客户端ID以及它们对应的用户ID的哈希值是否更实际,然后在收到新消息时,使用
var socket = hash[userID]; socket.emit(message);
将消息发送到特定客户端有人对这种情况下的潜在瓶颈有任何想法吗?该站点可能有成千上万的并发用户正在针对多个事件进行更新。
最佳答案
我建议不要自己实现PubSub。我不得不做一次这样的广播,并使用RabbitMQ来处理连接和路由(包括广播)。
使用反向Ajax调用完成到浏览器的实时消息传递(长时保持http连接,请参阅Comet on Wikipedia)
参见RabbitMQ server和libraries for Node
Rabbit MQ具有许多优点: