当我正在使用io.sockets.on('connection', function(socket){...});
创建subscribe
变量时,我正在使用redis在socket.io客户端之间发布和订阅消息。然后使用subscribe函数将客户端订阅到频道。
我的问题是它是否有权使用相同的订阅变量来执行发布操作?或者用redis.createClient()
创建另一个用于发布消息的实例很重要,所以我将有2个实例,一个用于发布,一个用于订阅......
由于
答案 0 :(得分:11)
来自Redis docs:
一旦客户端进入订阅状态,除了额外的SUBSCRIBE,PSUBSCRIBE,UNSUBSCRIBE和PUNSUBSCRIBE命令外,它不应该发出任何其他命令。
出于这个原因,您需要两个客户端,一个用于订阅,一个用于发布(以及可能的其他命令)。
答案 1 :(得分:0)
通过subscribe变量,你的意思是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
错误。
您确实需要为订阅创建一个客户端(可以动态修改),以及一个要发布的客户端。当客户的订阅是免费的时,您将再次处于正常状态。