2015-02-06 83 views
1

我正在使用NodeJS和Redis的聊天应用程序,为什么我使用Redis订阅,因为我需要在用户登录时通知其他用户,当用户登录时我的问题开始第一次它正常工作的on消息侦听器调用一次,但是当同一个用户刷新页面时,我发现发布方法已被调用两次。Redis on message listener triggered triggered

这里是我的代码示例,我使用:

var redisClient = redis.createClient({ 
 
    auth_pass: password 
 
}); 
 
var myServer; 
 

 
myServer = require('http').createServer(app); 
 

 
var socketIo = require('socket.io').listen(myServer); 
 
myServer.listen(port); 
 

 
redisClient.subscribe('myChannel'); 
 

 
socketIo.on('connection', function(dbSocket) { 
 
     var redisClient2 = redis.createClient({ 
 
     auth_pass: password 
 
     }); 
 

 
     /***Code for handle request***/ 
 

 
    } 
 

 
    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); 
 
    });

+0

检举这个问题,因为目前还不清楚你问 请说明您的具体问题或添加额外的细节,突显正是你需要的。正如目前所写,很难确切地说出你在问什么。请参阅“如何问问”页面以获取有关澄清此问题的帮助。 – bitoiu 2015-02-06 22:38:31

+0

我更新了我的问题,可能会帮助您识别我的问题,@bitoiu也可以请您删除我的问题中的投票,并提前致谢。 – nkarmi 2015-02-07 07:49:15

+0

您需要提供可操作的代码片段,以便我们可以为您提供帮助。你正在描述一个非常广泛的场景。请访问http://stackoverflow.com/help/how-to-ask – bitoiu 2015-02-07 17:55:22

回答

1

这是因为你的redisClient.on(“信息”)事件设置的连接上的回调中,因此每连接完成后,您再次附加事件。

将此代码块移到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); 
    });