2017-09-26 7 views
0

私はティッカーデータを生成する単一のストリームソースSを持っています。単一のソースからの複数のサーバーを使用したソケットio経由のストリーム

ソケットioを使用するノードアプリケーションにSを統合したいと思います。私のアプリは、生産中の複数のサーバー環境で実行される、のは、サーバーAとBの最初

が、私は単純に思ったとしましょう:

  1. 利用ソケットIOのRedisのアダプタ:https://github.com/socketio/socket.io-redis AとBの両方に

  2. SとAとBの両方を接続し、単にチャンクを適切な部屋にブロードキャストするだけで、AからBのデータを取り出すことができます。

しかし、このことについて考えた後、私はおそらくAとBの両方がクライアントに同じデータをブロードキャスト(とクライアントが同じ情報の重複を受ける)の問題に実行することを実現しています。私はこれについて正しく考えていますか?どうすればこれを避けることができますか?

答えて

1

1つのクライアントが1つのサーバーに接続されていて、同じサーバー上に同じ接続が開いている必要があります。これはセッションの粘着性と呼ばれ、2つの接続が開いていません。これを行うには、サーバーのプール上でロードバランサとして機能するプロキシを使用する必要があります。たとえば、nginxを使用できます。

ルーム内のすべてのユーザーに正しくブロードキャストするために、サーバー間でルームを同期させるだけです(一部のユーザーはサーバーAのルームに、サーバーBのルーム内にあるユーザーがいるため)。 nginxのとWebSocketをおよそ

ドキュメント: https://www.nginx.com/blog/nginx-nodejs-websockets-socketio/

それは私はあなたがRedisのアダプターを忘れていると思う

+0

お役に立てば幸いです。アダプタを使用すると、接続されているすべてのクライアント(サーバB経由で接続されているイベント)を見つけて、すべてのクライアントにデータをプッシュする(つまり、私の重複の懸念のデータ)。 – pQuestions123

+0

赤いアダプターは、私の答えの2番目の段落を修正します。しかし、Redisクライアントを使用している場合は、常にそれを介してブロードキャストする必要があります。サーバーからブロードキャストしてからアダプタで再度ブロードキャストする場合、クライアントの一部が同じデータを2回取得することは明らかです。単一のクライアントとの通信は、通常どおりに行うことができます。 –

+0

私の問題は、すべてのサーバーがアダプターを介して同じデータをブロードキャストしている場合、クライアントは同じデータを2回受信しませんか? – pQuestions123

関連する問題