SocketIO播放速度太快

时间:2013-03-26 20:52:37

标签: node.js sockets heartbeat

我想每秒向每个客户端广播一条消息(将其视为自定义心跳机制)。

因此启动NodeJS应用程序,创建套接字,当我从客户端应用程序连接时,会广播心跳消息。我仍在开发客户端应用程序,这意味着一直按F5并重新加载应用程序。新客户端SocketIO连接是在加载时创建的,这会导致心跳消息进入客户端应用程序,速率远高于1个消息/秒。

代码 - 服务器端没有什么特别之处:

var server = http.createServer(app);
var io = require('socket.io').listen(server);
server.listen(8080);

io.sockets.on('connection', function(socket) {
  ...
  setInterval(function() {
    console.info('broadcasting heartbeat');
    socket.broadcast.emit('heartbeat', /* custom heartbeat*/);
  }, 1000);
  ...
});

客户方:

var socket = io.connect('localhost', { 'reconnect': false, port: 8080 });
socket.on('heartbeat', function(data) { console.log('heartbeat'); });

有人可以给我一些建议吗?感谢

1 个答案:

答案 0 :(得分:3)

每次都不需要启动间隔。您可以存储intervalID,甚至可以在不需要时使用clearInterval(INTERVAL);将其清除。

var server = http.createServer(app);
var io = require('socket.io').listen(server);
server.listen(8080);

var INTERVAL;

io.sockets.on('connection', function(socket) {
  ...
  if (!INTERVAL) {
    INTERVAL = setInterval(function() {
      console.info('broadcasting heartbeat');
      socket.broadcast.emit('heartbeat', /* custom heartbeat*/);
    }, 1000);
  }
  ...
});