Html 实现一个可扩展的多室聊天系统

Html 实现一个可扩展的多室聊天系统,html,websocket,tornado,sockjs,Html,Websocket,Tornado,Sockjs,我最近一直在研究sockjs tornado,我正在为一个社交网站开发聊天功能。我试图了解构建可伸缩多室聊天功能时使用的常用方法。我将概述我想到的几种方法,并希望得到反馈。在现实世界中使用什么方法?这些方法的优点和缺点是什么 预先要求: 流动龙卷风 使用sockjs tornado库 用于js的sockjs客户端库 其他一切都是开放的 我考虑过的方法: For循环 这似乎是最简单的方法。创建订阅特定房间类的用户类。用户发送一个包含房间id的message类,服务器只将循环中的消息重定向到已订

我最近一直在研究sockjs tornado,我正在为一个社交网站开发聊天功能。我试图了解构建可伸缩多室聊天功能时使用的常用方法。我将概述我想到的几种方法,并希望得到反馈。在现实世界中使用什么方法?这些方法的优点和缺点是什么

预先要求:
  • 流动龙卷风
  • 使用sockjs tornado库
  • 用于js的sockjs客户端库
其他一切都是开放的

我考虑过的方法: For循环 这似乎是最简单的方法。创建订阅特定房间类的用户类。用户发送一个包含房间id的message类,服务器只将循环中的消息重定向到已订阅该房间的用户。在我看来,这是迄今为止最糟糕的,因为复杂性显然至少是线性的。(想象一下,500个用户同时连接到5个聊天室。)

多任务/多服务器实例 这似乎也是一个坏主意,因为您可以在任何时间运行500个服务器实例。。。不同的港口?我真的不确定这个方法的实现

本地支持 现在,很多库都内置了这种功能,比如socketio。但是,这不是一个选项,因为只有node.js支持。(我在tornado服务器上。)Socks尤其没有内置对多个“房间”的支持

结论
我正在寻找资源/案例研究和行业标准。任何帮助都将不胜感激。

我只想使用一个消息队列服务器,如扇出交换,作为每个“聊天室”。 您可以看到在Python中使用扇出交换的示例。 AMQP库也适用于Tornado

使用消息队列系统的优点是,您可以让用户连接到不同服务器上的不同Tornado进程,同时仍在同一个“房间”,从而在HTTP层上实现高可用性。 RabbitMQ还具有HA功能(尽管不是最强大的)