Express JS中的Socket.io连接执行多次

Js *_*Lim 0 javascript node.js express socket.io

我参考这个 repo来集成 socket.io。

我想要实现的是,每秒发送到客户端的倒数计时器setInterval在服务器端运行。我得到的结果是

Socket.io 和 Express JS

那里的终端on.('connection'),我第一次刷新页面时,它执行了 4 次on.('connection'),倒计时工作正常。然后我第二次刷新,它执行了 8 次on.('connection'),并且倒数计时器那里也有 2 个值。然后继续……12次,16次……

app.js 中

app.use(function(req, res, next){
  res.io = io; 
  io.on('connection', function(socket) {
    console.log(socket.id + ' connected.');
  }); 
  next();
});
Run Code Online (Sandbox Code Playgroud)

路由/users.js

router.get('/', function(req, res, next) {

  models.User.findAll({
    include: [ {model: models.Task, as: 'tasks'} ]
  }).then(function(users) {

    var eventTime= new Date('2017-03-31 13:00:00').getTime();
    var currentTime = new Date().getTime();
    var diffTime = eventTime - currentTime;
    var duration = moment.duration(diffTime*1000, 'milliseconds');
    var interval = 1000;

    setInterval(function() {
      duration = moment.duration(duration - interval, 'milliseconds');
      res.io.emit('countdown', { time_left: duration.hours() + ":" + duration.minutes() + ":" + duration.seconds() }); 
    }, interval);

    res.render('users', {
      title: 'Sequelize: Express Example',
      users: users
    });   
  });   
});
Run Code Online (Sandbox Code Playgroud)

这里有什么问题吗?

Js *_*Lim 5

我在这里找到了答案

io.on('connection', function(socket) {
  socket.removeAllListeners(); <---------- ADD THIS LINE
  console.log(socket.id + ' connected.');
}); 
Run Code Online (Sandbox Code Playgroud)