【问题标题】:Not able to set interval on socket.io event无法设置 socket.io 事件的时间间隔
【发布时间】:2014-10-03 03:59:36
【问题描述】:

有没有办法在保持时间控制的同时拆分和循环每个客户端?我需要发出所有推文,但每条推文之间都有固定的时间。到目前为止,这是引发异常的代码:

var socketList = new Array();
io.on('connection',function(socket){
    socketList.push(socket);
});

setInterval(function() {
    socketList.forEach('tweet', function(tweet) {
        io.sockets.emit('info', {tweet: tweet});
    });
}, 2000);

此代码有效,但流式传输推文太快:

io.on('connection', function (socket) {  
    stream.on('tweet', function(tweet) {
        socket.emit('info', {tweet: tweet});
    });
});

编辑此代码不会给出任何错误,但不会流式传输任何推文:

var io = require('socket.io').listen(server);
var stream = T.stream('statuses/filter', { track: 'lol' })

var socketList = new Array();
io.on('connection',function(socket){
    socketList.push(socket);
});

function EmitTweets() {
    stream.socketList.forEach('tweet', function(tweet) {
        io.sockets.emit('info', {tweet: tweet});
    });
    setTimeout(EmitTweets, 1000);
}

不知道在哪里可以调用“流”

【问题讨论】:

  • 您找到问题和解决方案了吗?

标签: javascript node.js twitter websocket socket.io


【解决方案1】:

setInterval 是同步的。试试这个:

function emitTweets() {
  socketList.forEach('tweet', function(tweet) {
    io.sockets.emit('info', { tweet: tweet });
  });

  // this is the part that makes it repeat
  setTimeout(emitTweetes, 2000);
}

【讨论】:

  • 谢谢,我想我快到了。在 setTimeout 之后它不会给出任何错误,但不会发出推文。请查看我更新的代码。我必须在哪里调用流?
  • 我刚刚意识到,这比我想象的要复杂。推文以自己的速度进入,你试图让它们发出的速度比它们来得慢。但这是一个问题,因为在超时期间出现的推文会发生什么?目前,我想不出一个好的解决方案,抱歉。
  • 帮助我理解问题,我很感激。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-12
  • 1970-01-01
  • 1970-01-01
  • 2020-06-21
  • 1970-01-01
  • 2018-06-26
  • 1970-01-01
相关资源
最近更新 更多