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
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 aError: 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.
From the Redis docs:
For this reason, you'll need two clients, one for subscribing and one for publishing (and potentially other commands).