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已触发两次_Node.js_Redis_Socket.io - Fatal编程技术网

Node.js 消息侦听器上的Redis已触发两次

Node.js 消息侦听器上的Redis已触发两次,node.js,redis,socket.io,Node.js,Redis,Socket.io,我正在使用NodeJS和Redis开发聊天应用程序,为什么我要使用Redis subscribe,因为我需要在用户登录时通知其他用户,当用户第一次登录时我的问题就开始了,它工作正常消息侦听器调用了一次,但当同一用户刷新页面时,我发现publish方法被调用了两次 下面是我使用的代码示例: var redisClient=redis.createClient({ 验证密码:密码 }); var-myServer; myServer=require('http')。createServer(应用程

我正在使用NodeJS和Redis开发聊天应用程序,为什么我要使用Redis subscribe,因为我需要在用户登录时通知其他用户,当用户第一次登录时我的问题就开始了,它工作正常消息侦听器调用了一次,但当同一用户刷新页面时,我发现publish方法被调用了两次

下面是我使用的代码示例:

var redisClient=redis.createClient({
验证密码:密码
});
var-myServer;
myServer=require('http')。createServer(应用程序);
var socketIo=require('socket.io').listen(myServer);
侦听(端口);
redisClient.subscribe('myChannel');
socketIo.on('connection',函数(dbSocket){
var redisClient2=redis.createClient({
验证密码:密码
});
/***处理请求的代码***/
}
redisClient.on('message',函数(通道,消息){
//当刷新页面时,我调用publish方法,系统会进入消息侦听器两次
var data=JSON.parse(消息);

});
这是因为redisClient.on('message')事件设置在on connection的回调中,因此每次建立连接时,都会再次附加该事件

将此代码块移到on('connection')事件之外应该可以解决此问题

redisClient.on('message', function(channel, message) {
      //When refresh page , and I call publish method , the system enter message listener twice

      var data = JSON.parse(message);
    });

标记此问题,因为不清楚您在问什么。请澄清您的具体问题或添加其他详细信息,以突出显示您所需要的内容。正如目前所写的,很难准确说出您在问什么。请参阅“如何提问”页面以获得澄清此问题的帮助。我更新了我的问题,这可能有助于您识别为解决我的问题,@bitoiu aslo请你取消对我问题的否决票,并提前感谢。你需要提供一段可操作的代码,以便我们可以帮助你。你描述了一个非常广泛的场景。请访问@bitoiu这里的我使用的代码示例,希望能帮助你找到我的问题。这没有任何意义。Regarding redisClient.on('message')仅在发生发布事件时触发