問題タブ [socket.io-redis]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
379 参照

node.js - remoteDisconnect socket.io と redis

NodeJsRedis アダプターを使用して socket.ioを実装しようとしています。

ほとんどの場合は機能しますが、ソケットを切断/接続しようとするとエラーが発生することがあるので、正しく実装していないと思います。

誰かが と の違いを説明してくれません socket.disconnect();io.of('/').adapter.remoteDisconnect();

io を次のように初期化すると:

socket.disconnect();それでは、redisIO の使用に注意する必要はありませんか? 使用している場合remoteDisconnectでもキャプチャできますか、それとも呼び出すsocket.on('disconnect', fn)必要がありますか?remoteDisconnectsocket.on('disconnect', fn)

クライアントが切断された場合はどうなりますか? どうすればそれを socket.io クラスターに伝播できますか?

実用的な例をいただければ幸いです:)

ありがとう!

0 投票する
1 に答える
2197 参照

node.js - socket.io-redis モジュールがサーバー間で機能しない

皆さん、 socket.io-redis のドキュメントに従って socket.io-redis モジュールを実装しようとしています。あるクライアントから同じサーバー上の別のクライアントにメッセージをブロードキャストする場合、問題なく動作します。しかし、ポート 80 とポート 81 で 1 つずつ、2 つの同一のサーバーを実行し、クライアント A (ポート 80 に接続) とクライアント B (ポート 81 に接続) の間でメッセージをブロードキャストしようとすると、メッセージが通過しません。これは私のコードです:

ソケット接続が初期化されると、クライアントのユーザー ID がキーと値のペアとして redis のそれぞれの socket.id に設定され、次を使用して取得されます。

redis-cli モニターは、メッセージが実際に発行されていることを示しています。両方の websocket サーバーが同じ redis サーバーに接続されている場合、websocket メッセージは異なるアドレスを持つサーバー間で受け渡されるはずであると理解しています。

ただし、異なるポートで 2 つの同一のサーバーを使用している場合、クライアント A はクライアント B からメッセージを受信しません。クライアント A は、クライアント B と同じポートでサーバーに接続されている場合にのみ、メッセージを受信できます。

誰かがそれを助けることができれば大歓迎です.socket.io-redisアダプタモジュールを完全に間違って使用していることはわかっています.