15

スケーリングのために HTTP サーバーの複数のインスタンスを実行すると便利です。

ただし、各サーバー インスタンスにはクライアントへの独自の接続セットがあるため、これは WebSocket では機能しないようです。

すべてのサーバー インスタンスが共通の接続セットを共有する必要がある場合、複数のサーバー インスタンスで WebSocket を実行するにはどうすればよいでしょうか?

4

3 に答える 3

2

私は、スケーリング可能な websocket アプリを開発するために同じことを探していましたが、これについて議論する記事はあまりないようです。

ケース 1推奨されるアプローチは、 Herokuが提案 するように Redis キャッシュを使用するか、Service Bus を使用するか、SignalRのスケールアウトで説明されている 3 つのアプローチのように db に格納することです。ただし、キャッチがあります。2 番目のインスタンスが知りたいために、スケジューラまたはバックグラウンド ワーカー/サービスを継続的に実行して、cache/queue/dbの新しい変更を検出する必要があるため、わずかな待ち時間が必要です。

Case 2 私の場合、リアルタイムに近い高周波が欲しい。そのため、インスタンス間に永続的な接続が必要です。ただし、課題は、ステートレス Web サーバー間でそれを行うことができないことです。

したがって、中間の長期実行バックグラウンド/ワーカー サービスが必要であり、コードから独自のネット/ソケット/TCP を実装し、接続プールを維持する必要がありますが、それは簡単な作業ではありません。

サーバー上の Websocket クライアントを(このサービスのために)使用することを考えているので、クライアントとインスタンス間の通信パターンはほぼ同じです。これを参照してください:1 2。残っていることの 1 つは、インスタンスのアップ/ダウンごとにインスタンスの IP/URL を分散キャッシュまたはデータベースに更新することです。

最後のオプションは、新しいWebRTCを探索することです

于 2013-11-24T11:46:20.223 に答える
1

まだ試していませんが、接続をスティッキーにすることで問題が解決する可能性があると考えています。この設定は、ロード バランサーで設定できます。

于 2014-11-10T05:41:38.690 に答える
-3

これまでに見つけた最善の解決策はhttp://pusher.com/です。

セットアップが簡単。素晴らしいドキュメント。

于 2013-11-24T18:17:05.353 に答える