2

ユーザーがログインし、ルームに参加し、WebSocket を使用してこのルーム内の他のユーザーとデータを交換できるようにする Node.JS サーバーを設計しました。ただし、このセットアップをスケーラブルにする方法を探しています。

nginx や haproxy などのさまざまなロードバランサーの調査に午後中を費やしていますが、セットアップを整理する方法がまだわかりません。

最初に、ユーザーはログインしてアクティブなルームを表示できます。この部分をスケーラブルにするのは大したことではありません。ただし、特定のルームに参加することができ、その時点でルーム内の他のユーザーと同じ node.js インスタンスに接続する必要があります。分かりにくいのはこの部分です。

今のところ、私の解決策は、2 つの異なるタイプの node.js インスタンスを作成することです。ログインおよびルーム概要リクエスト メソッドを処理する 1 つのジェネリック タイプと、多数のルームを処理する 1 つのルームタイプ。次に、ジェネリック型は、どの特定のインスタンスがどの部屋を担当しているかを追跡し、正しいアドレスをユーザーのアプリケーションに配信できます。

しかし、私はこの解決策に満足していないので、提案をお待ちしています。これがかなり漠然とした質問であることは理解していますが、正確な解決策を探しているわけではなく、すべてを整理する方法についてのヒントを探しています.

4

1 に答える 1

4

udidu は考えられる解決策に触れましたが、拡張するには、スケーラブルな pub/sub ソリューションを検討する必要があります。人気のあるデータ ストアであるRedisには pub/sub が組み込まれており、私はそれを頻繁に使用して大きな効果を上げています。

Redis (またはその他のシステム) を使用して、Node.js アプリのすべてのインスタンスが、誰がどのルームでチャットしているかに関する情報を確実に受け取るようにすることで、ルーム内のすべてのユーザーが同じ Node.js インスタンスに接続されているという依存関係がなくなります。

PubSub を使用した Redis チャット

于 2012-10-25T16:17:17.810 に答える