我最近一直在研究 sockjs-tornado,并且正在为社交网站开发聊天功能。我正在尝试了解用于构建可扩展多房间聊天功能的常用方法。我将概述一些我想到的方法,我希望得到反馈。现实世界中使用了哪些方法?这些方法的优点和缺点是什么?
先决条件:
- 运行龙卷风
- 使用 sockjs-tornado 库
- 用于 js 的 sockjs-client 库
其他一切都是开放的。
我考虑过的方法:
循环
这似乎是最简单的方法。您创建订阅某些房间类的用户类。用户发送一个包含房间 id 的消息类,服务器将循环中的消息仅重定向到已订阅该房间的用户。在我看来,这似乎是迄今为止最糟糕的,因为复杂性显然至少是线性的。(想象一下 500 个用户同时连接到 5 个聊天室。)
多任务/多个服务器实例
这似乎也是一个坏主意,因为您可以随时在...不同的端口上运行 500 个服务器实例?我真的不确定这个方法的实现。
原生支持
现在,很多库都内置了这个,比如 socketio。但是,由于唯一的 node.js 支持,这不是一个选项。(我在龙卷风服务器上。)特别是袜子没有内置支持多个“房间”。
结论
我正在寻找资源/案例研究和行业标准。任何帮助,将不胜感激。