【问题标题】:Implementing a scalable multiroom chat system实施可扩展的多房间聊天系统
【发布时间】:2013-08-25 08:42:00
【问题描述】:

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

先决条件:

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

其他一切都是开放的。

我考虑过的方法:

for循环

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

多任务/多服务器实例

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

原生支持

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

结论

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

【问题讨论】:

    标签: html websocket tornado sockjs


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-29
      • 2012-02-15
      • 1970-01-01
      • 2015-01-25
      • 2011-03-25
      • 1970-01-01
      相关资源
      最近更新 更多