質問要求:私はこの解決策に過ぎないが、私は必要な方法で動作しているようです見つけることを試みたhttps://stackoverflow.com/a/18650183/4478897socket.io + Redisの+ expressjsクラスタ - expressjsにソケットオブジェクトを取得し、この回答に基づいて
を。
クラスタリングexpressjs
とsocket.io
我々は(... io.sockets.on('connection',
)のRedisを使ってセッションを共有し、io
世界の内側io
メッセージを送ることができます。問題は、expressjs
の世界(route.get/post
)内にメッセージを送信する(または単純なsocket.join/leave
を使用する)場合です。
我々は急行request
オブジェクト(または単にexport
io
オブジェクト)にクライアントsocket
オブジェクトをatachし、任意のGET/POSTルート上の任意の時点でそれを使用することができ、クラスタを使用していない場合。我々はクラスタリングとexpressjs
世界内側socket
オブジェクトを取得するような方法を使用している場合は、このクライアントのsocket
オブジェクトが他のworker
で初期化されるので、一方では
socket
オブジェクトが定義されていません。
いくつかの例の流れ:
- クライアントがhttp://localhostに接続し、
worker 1
がこの要求を処理します。 - ページがロードされた後、クライアントは
socket.io
に接続します。Worker 2
がこの接続を処理します。 - クライアントはPOSTを実行し、もう一度
worker 1
またはworker X
がこの要求を処理します。
この場合、クライアントがPOSTを実行する場合、worker 2
のみがこのクライアントのsocket
オブジェクトを認識します。したがって、これは未定義のsocket
オブジェクトを取得します。
だから、質問:
がどのように我々はexpressjs request
オブジェクト上でそれを再利用するために、任意のworker
からクライアントsocket
オブジェクトを取得することができます。
多分私のコードは間違っていますが、上記の答えへのリンクに似ています。
ノート
- は、プロキシのいくつかの種類を使用する必要はありません。
- 他のライブラリ(sockjs方法、式...)に移行したくない 私の英語のため申し訳ありません
- :)最後nodejsを使用して
、socket.io、expressjs、socket.io-赤、赤...バージョン
何かお気軽にお問い合わせください!
UPDATE 1
解決策が、まだそれをテストする必要があります。これが本当に良いのか分かりません:解決策。
- UPDATE 3:更新1と同様に、私自身の答え
UPDATE 2
上のコードの作業が、https://nodejs.org/dist/latest-v5.x/docs/api/cluster.html#cluster_event_message
私は、マージを見ました。とにかくありがとう:D – nada