3

我正在使用 redis 在 socket.io 客户端之间发布和订阅消息,当客户端连接到服务器 ( io.sockets.on('connection', function(socket){...});) 时,我正在使用创建subscribe变量redis.createClient(),然后使用 subscribe 函数将客户端订阅到频道。

我的问题是它是否有权使用相同的订阅变量来执行发布操作?或者创建另一个redis.createClient()用于发布消息的实例很重要,所以我将有 2 个实例,一个用于发布,一个用于订阅...

谢谢

4

2 回答 2

12

来自Redis 文档

一旦客户端进入订阅状态,它就不应该发出任何其他命令,除了额外的 SUBSCRIBE、PSUBSCRIBE、UNSUBSCRIBE 和 PUNSUBSCRIBE 命令。

出于这个原因,您将需要两个客户端,一个用于订阅,一个用于发布(可能还有其他命令)。

于 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错误。

您确实需要为订阅创建一个客户端(可以即时修改),以及一个要发布的客户端。当客户的订阅免费时,您又回到了正常状态。

于 2012-08-19T20:50:04.840 回答