0

我最近一直在研究 sockjs-tornado,并且正在为社交网站开发聊天功能。我正在尝试了解用于构建可扩展多房间聊天功能的常用方法。我将概述一些我想到的方法,我希望得到反馈。现实世界中使用了哪些方法?这些方法的优点和缺点是什么?

先决条件:

  • 运行龙卷风
  • 使用 sockjs-tornado 库
  • 用于 js 的 sockjs-client 库

其他一切都是开放的。

我考虑过的方法:

循环

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

多任务/多个服务器实例

这似乎也是一个坏主意,因为您可以随时在...不同的端口上运行 500 个服务器实例?我真的不确定这个方法的实现。

原生支持

现在,很多库都内置了这个,比如 socketio。但是,由于唯一的 node.js 支持,这不是一个选项。(我在龙卷风服务器上。)特别是袜子没有内置支持多个“房间”。

结论

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

4

1 回答 1

1

我只会使用像RabbitMQ这样的消息队列服务器和扇出交换作为每个“聊天室”。您可以在此处查看在 Python 中使用扇出交换的示例。Pika AMQP库也适用于 Tornado。

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

于 2013-08-29T16:33:00.280 回答