2016-05-01 12 views
1

私はsocket.ioを使いたいですが、私はアプリの複数のインスタンスを実行しているので、興味深いところです。Socket.ioとRedis pub/sub

  • 異なるポートで複数のインスタンスを実行する必要があります。ここでは問題ありません。

  • 私はノード独自のクラスタを使用しないことに決めました。ロードバランシングにNginxを使用します(そのため、アプリケーションの複数のインスタンスを作成するのです)。 Nginxはウェブソケットをサポートしているので、これも並べ替えられています。

  • 複数のインスタンスがあり、すべてが直接話すことができない場合(ユーザーAはインスタンスXに接続します。ユーザーBがインスタンスYに接続している場合、サーバー互いに独立しているので)、socketioのemit &ブロードキャスト機能を模倣するために、Redisのpub/subメカニズムをラッパーとして使用する必要があります。この方法では、アプリのインスタンスが複数ある場合や、異なるサーバーで実行している場合でも、同じRedisサーバーに接続されている限り、誰もが互いに話すことができます。これを実現するには、socket.io-redisとsocket.io-emitterモジュールを使用する必要があります。

このアプローチは間違っていますか?

答えて

1

ノードアプリケーションの複数のインスタンスが異なるポートに複数存在することを確認してください。 1つのサーバーで想定する以上の負荷を処理できる可能性があり、socket.ioを使用して異なる通信チャネルを分離する方法があるためです。

+0

私はすべてのCPUを利用したいと思います。クラスタモジュール(ネイティブソリューション)を使用するか、複数のインスタンス(コア数に等しい)を作成する2つの方法があり、ソケット通信用のパブ/彼らは同じサーバー上にない場合、彼らは直接お互いに話すことができない)とNginxは、これらのインスタンス間の負荷分散を処理させる。また、複数のインスタンスを実行する複数のサーバーでも機能するはずです。あれは正しいですか? – salep

+1

私はあなたが言っていることはうまくいくと思います。あなたが実際にCPUにバインドされているかどうかを再確認したいと思っていただけです。もちろん、1つのプロセスでCPU/IOの問題に遭遇した場合、スケーラブルなソリューションが得られることはうれしいことですが、それがそのボトルネックに陥ることを保証するものではありません。 –

+0

私はおそらくいつでもすぐに(おそらく決して)そのボトルネックに遭遇することはありませんが、できる限り多くのリソースを利用するスケーラブルなソリューションを望みます。ありがとう! – salep

関連する問題