0

私は最近 sockjs-tornado を調べていて、ソーシャル ネットワーキング サイトのチャット機能に取り組んでいます。スケーラブルなマルチルーム チャット機能を構築する際に使用される一般的な方法の感触をつかもうとしています。私が考えたいくつかの方法を概説し、フィードバックを得たいと思います. 現実の世界ではどのような方法が使用されていますか? これらの方法の長所と短所は何ですか?

前提条件:

  • 実行中の竜巻
  • sockjs-tornado lib の使用
  • js用のsockjs-client lib

他のすべては開いています。

私が検討した方法:

ループ用

これが最も簡単な方法のようです。特定のルーム クラスにサブスクライブするユーザー クラスを作成します。ユーザーはルーム ID を含むメッセージ クラスを送信し、サーバーはループ内のメッセージをそのルームを購読しているユーザーにのみリダイレクトします。複雑さは明らかに少なくとも線形であるため、これは私には最悪のように思えます。(一度に 500 人のユーザーがそれぞれ 5 つのチャット ルームに接続しているとします。)

マルチタスク/複数のサーバー インスタンス

いつでも 500 のサーバー インスタンスを実行できるため、これも悪い考えのように思えます... 異なるポートですか? このメソッドの実装についてはよくわかりません。

ネイティブ サポート

確かに、socketio など、多くのライブラリにこれが組み込まれています。ただし、node.js のみがサポートされているため、これはオプションではありません。(私は tornado サーバーを使用しています。)特に Socks には、複数の「部屋」のサポートが組み込まれていません。

結論

リソース/ケース スタディ、および業界標準を探しています。どんな助けでも大歓迎です。

4

1 に答える 1

1

各「チャット ルーム」としてファンアウト交換を備えたRabbitMQのようなメッセージ キュー サーバーを使用するだけです。Python でのファンアウト交換の使用例は、こちら で確認できますPika AMQP ライブラリは Tornado でも動作します。

メッセージ キューイング システムを使用する利点は、ユーザーが同じ「部屋」にいながら、異なるサーバー上の異なる Tornado プロセスに接続できることです。これにより、HTTP レイヤーで高可用性が得られます。RabbitMQ には HA 機能もあります (最高ではありませんが)。

于 2013-08-29T16:33:00.280 に答える