【问题标题】:Redis on message listener triggered twice消息监听器上的 Redis 触发了两次
【发布时间】:2015-02-06 20:57:00
【问题描述】:

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

这是我使用的代码示例:

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

【问题讨论】:

  • 标记此问题,因为不清楚您在问什么 请澄清您的具体问题或添加其他详细信息以准确突出您的需要。正如目前所写的那样,很难准确地说出你在问什么。请参阅“如何提问”页面以获得澄清此问题的帮助。
  • 我更新了我的问题,这可能有助于您识别我的问题,@bitoiu aslo 您能否删除对我的问题的投票,并提前致谢。
  • 您需要提供一段可操作的代码,以便我们为您提供帮助。您正在描述一个非常广泛的场景。请访问stackoverflow.com/help/how-to-ask
  • @bitoiu 这是我使用的代码示例,希望能帮助您找到我的问题。

标签: node.js redis socket.io


【解决方案1】:

这是因为你的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);
    });

【讨论】:

  • 这没有任何意义。关于 redisClient.on('message') 只会在发布事件发生时触发
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-03
  • 1970-01-01
  • 2015-10-11
  • 1970-01-01
  • 2015-11-22
  • 2017-01-08
  • 1970-01-01
相关资源
最近更新 更多