当我转到localhost:3000
时,broadcast
事件并不等待每3秒广播一次数据。它立即发送所有值。
理想情况下,它应该花费3*500 = 1500
秒,但它会在2秒左右的时间内发出500个数据。
为什么会这样?
io.on('connection', function (socket) {
console.log('New user connected');
socket.on('createMessage', function (message) {
console.log(message);
io.emit('newMessage', { from: message.message, createdAt: new Date().getTime() });
});
setInterval(function(){
socket.emit('broadcast', {message: track()} , 3000);
});
socket.on('disconnect', function () { console.log('Disconnected from client'); });
});
答案 0 :(得分:1)
您的setInterval
函数语法有误。使用这个,
setInterval(function(){
socket.emit('broadcast', {message: track()});
}, 3000)
答案 1 :(得分:1)
您的代码中有两个问题,第一个问题是将interval时间参数发送到emit函数而不是setInterval,您可以通过编写来解决
setInterval(function(){
socket.emit('broadcast', {message: track()}); // notice the 3000 is not here
}, 3000);
但是现在它产生了第二个问题,断开连接后会发生什么?间隔仍在每3000 MS执行一次,这是内存泄漏! 您还应该使间隔无效
const interval = setInterval(...);
socket.on('disconnect', function () {
clearInterval(interval);
console.log('Disconnected from client');
});