消息监听器上的Redis触发了两次

时间:2015-02-06 20:57:00

标签: node.js redis socket.io

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

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



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




1 个答案:

答案 0 :(得分:2)

这是因为你的redisClient.on(' message')事件是在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);
    });