Node.js 使用套接字IO回调
我正在使用node和socket io将twitter提要流式传输到浏览器,但是流太快了。为了降低速度,我尝试使用setInterval,但它要么只是延迟流的开始(没有设置tweet之间的等间隔),要么说广播时不能使用回调。服务器端代码如下: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
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()调用的空间,需要创建某种队列,或者暂停并恢复流。