Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using the same redis.createClient() instance for publish and subscribe

I'm working with redis to publish and subscribe messages between socket.io clients, when client connects to the server (io.sockets.on('connection', function(socket){...});) i'm creating a subscribe variable using redis.createClient() and then using the subscribe function to subscribe the client to channel.

My question is if its right to use the same subscribe variable to do a publish action? or it's important to create another instance with redis.createClient() for publishing messages so i will have 2 instances, one for publishing and one for subscribing...

Thanks

like image 870
udidu Avatar asked Sep 14 '25 05:09

udidu


2 Answers

From the Redis docs:

Once the client enters the subscribed state it is not supposed to issue any other commands, except for additional SUBSCRIBE, PSUBSCRIBE, UNSUBSCRIBE and PUNSUBSCRIBE commands.

For this reason, you'll need two clients, one for subscribing and one for publishing (and potentially other commands).

like image 133
Michelle Tilley Avatar answered Sep 16 '25 20:09

Michelle Tilley


By subscribe variable you mean the object that redis.createClient() returns ? If yes, from the documentation, 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. so yes, you cannot publish to a client where you subscribed first, that would issue a Error: Connection in pub/sub mode, only pub/sub commands may be used error.

You do need to create one client for subscriptions (which can be modified on the fly), and one client to publish. When the subscriptions for a client are free, you have your normal state again.

like image 40
João Pinto Jerónimo Avatar answered Sep 16 '25 20:09

João Pinto Jerónimo