我最近一直在研究sockjs-龙卷风,并且正在为一个社交网站开发一个聊天功能。我试图了解构建可伸缩多室聊天功能所使用的常用方法。我将概述我想过的几种方法,并希望得到反馈。在现实世界中使用的方法是什么?这些方法的优缺点是什么?
Prereqs:
其他一切都是开放的。
我考虑过的方法:
用于循环
这似乎是最简单的方法。您创建一个订阅某些房间类的用户类。用户发送包含房间id的消息类,而服务器只将循环中的消息重定向到订阅该房间的用户。在我看来,这似乎是最糟糕的,因为复杂性显然至少是线性的。(想象一下,500个用户同时连接到5个聊天室。)
多任务/多服务器实例
这似乎也是个坏主意,因为您可以在任何时候运行500个服务器实例.不同的港口?我真的不确定这个方法的实现。
本地支持
现在,很多库都内置了这一点,比如socketio。但是,由于唯一的node.js支持,这不是一个选项。(我在龙卷风服务器上)袜子,特别是没有建立支持多个“房间”。
结论
我正在寻找资源/案例研究,以及行业标准。任何帮助都将不胜感激。
发布于 2013-08-29 16:33:00
我只会使用像RabbitMQ这样的消息队列服务器和一个扇出交换作为每个“聊天室”。您可以看到在Python 这里中使用扇出交换的示例。皮卡 AMQP库也与“旋风”一起工作。
使用消息队列系统的优点是,您可以让用户连接到不同服务器上的不同旋风进程,同时仍然在同一个“房间”中,从而使您在HTTP层上具有高可用性。RabbitMQ还具有HA功能(虽然不是最强大的)。
https://stackoverflow.com/questions/18383473
复制相似问题