Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 使用相同的redis.createClient()实例进行发布和订阅_Node.js_Redis_Socket.io - Fatal编程技术网

Node.js 使用相同的redis.createClient()实例进行发布和订阅

Node.js 使用相同的redis.createClient()实例进行发布和订阅,node.js,redis,socket.io,Node.js,Redis,Socket.io,我正在使用redis在socket.io客户端之间发布和订阅消息,当客户端连接到服务器(io.sockets.on('connection',function(socket){…});)时,我正在使用redis.createClient()创建一个subscribe变量然后使用订阅功能将客户端订阅到频道 我的问题是,使用同一个subscribe变量执行发布操作是否正确?或者使用redis.createClient()创建另一个用于发布消息的实例很重要,因此我将有两个实例,一个用于发布,一个用于订

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

我的问题是,使用同一个subscribe变量执行发布操作是否正确?或者使用
redis.createClient()
创建另一个用于发布消息的实例很重要,因此我将有两个实例,一个用于发布,一个用于订阅

感谢来自以下网站的

一旦客户端进入订阅状态,它就不应该发出任何其他命令,除了其他SUBSCRIBE、PSUSCRIBE、UNSUBSCRIBE和PUNSCRIBE命令


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

通过subscribe变量,您是指redis.createClient()返回的对象吗?如果是,在文档中,
当客户端发出订阅或PSUBSCRIBE时,该连接将进入“发布/订阅”模式。此时,只有修改订阅集的命令才有效。
因此,是的,您不能发布到您首先订阅的客户端,这将发出一个
错误:连接在发布/订阅模式下,只能使用发布/订阅命令。
错误


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

谢谢,您的意思是我可以使用同一个客户端订阅多个频道?我说得对吗;您将获得消息发布到的频道的名称,作为
消息
事件处理程序的第一个参数。以下是一些要点,可以帮助您: