3

クライアントがサーバーに接続するときにredisを使用してsocket.ioクライアント間でメッセージをパブリッシュおよびサブスクライブしています( io.sockets.on('connection', function(socket){...});) 、サブスクライブ関数を使用してsubscribe変数を作成し、クライアントをチャネルにサブスクライブします。redis.createClient()

私の質問は、同じサブスクライブ変数を使用してパブリッシュ アクションを実行する権利があるかどうかです。redis.createClient()または、メッセージを発行するために別のインスタンスを作成することが重要なので、発行用と購読用の 2 つのインスタンスを作成します...

ありがとう

4

2 に答える 2

12

Redisドキュメントから:

クライアントがサブスクライブ状態に入ると、追加のSUBSCRIBE、PSUBSCRIBE、UNSUBSCRIBE、およびPUNSUBSCRIBEコマンドを除いて、他のコマンドを発行することは想定されていません。

このため、2つのクライアントが必要になります。1つはサブスクライブ用で、もう1つは公開用(および場合によっては他のコマンド)です。

于 2012-08-19T20:48:23.383 に答える
1

サブスクライブ変数とは、 redis.createClient() が返すオブジェクトを意味しますか? はいの場合、ドキュメントからそうです。When a client issues a SUBSCRIBE or PSUBSCRIBE, that connection is put into "pub/sub" mode. At that point, only commands that modify the subscription set are valid.最初にサブスクライブしたクライアントに公開することはできず、Error: Connection in pub/sub mode, only pub/sub commands may be usedエラーが発生します。

サブスクリプション用の 1 つのクライアント (オンザフライで変更可能) と、公開用のクライアントを 1 つ作成する必要があります。クライアントのサブスクリプションが無料になると、通常の状態に戻ります。

于 2012-08-19T20:50:04.840 に答える