Node.js 使用套接字IO回调

Node.js 使用套接字IO回调,node.js,twitter,socket.io,twitter-streaming-api,Node.js,Twitter,Socket.io,Twitter Streaming Api,我正在使用node和socket io将twitter提要流式传输到浏览器,但是流太快了。为了降低速度,我尝试使用setInterval,但它要么只是延迟流的开始(没有设置tweet之间的等间隔),要么说广播时不能使用回调。服务器端代码如下: function start(){ stream.on('tweet', function(tweet){ if(tweet.coordinates && tweet.coordinates != null){ io.socke

我正在使用node和socket io将twitter提要流式传输到浏览器,但是流太快了。为了降低速度,我尝试使用setInterval,但它要么只是延迟流的开始(没有设置tweet之间的等间隔),要么说广播时不能使用回调。服务器端代码如下:

function start(){

stream.on('tweet', function(tweet){

if(tweet.coordinates && tweet.coordinates != null){
    io.sockets.emit('stream', tweet);
    }       

});
}

  io.sockets.on("connection", function(socket){
   console.log('connected');    

   setInterval(start, 4000);

    });

我认为您误解了
.on()
如何用于流。它是一个事件处理程序。一旦安装,它就在那里,流可以随时呼叫您。您的间隔实际上只是让事情变得更糟,因为它安装了多个
.on()
处理程序

不清楚你所说的“数据来得太快”是什么意思。太快了什么?如果它比你想显示的要快,那么你可以将tweet存储在一个数组中,然后使用计时器决定何时显示数组中的内容


如果流中的数据来得太快,甚至无法存储,并且这是一个流动的nodejs流,则可以使用
.pause()
方法暂停流,然后,当您能够再次转到时,可以调用
.resume()
。有关更多信息,请参阅。

您的启动函数正在将侦听器附加到流。一旦连接了侦听器,套接字将以接收事件的速度发出事件。要腾出emit()调用的空间,需要创建某种队列,或者暂停并恢复流。