2013-03-26 30 views
1

我想播出一条消息,以每个客户端每秒(想想自定义心跳机制)。SocketIO广播太快

所以应用的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'); }); 

任何人可以给我一些建议什么是错的?由于

+0

试着提高'setInterval()'毫秒 – Gntem 2013-03-26 21:24:19

+0

哪里?我不想控制客户端的速度。服务器端的 – 2013-03-26 21:26:47

+0

。尝试解释某种自定义心跳是什么。为什么'socket.io'事件不适合你的应用程序?你使用'心跳'的方式最终每秒钟都会通过一条消息来冲击客户端。 – Gntem 2013-03-26 21:37:31

回答

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); 
    } 
    ... 
}); 
+0

好点!我将'setInterval'调用移出'io.sockets.on('connection',...'处理程序函数,它起作用!我犯了这样一个愚蠢的错误。谢谢! – 2013-03-26 21:57:33