我正在使用节点和套接字io将Twitter提要流式传输到浏览器,但是流太快了。为了减慢速度,我尝试使用 setInterval,但它要么只延迟流的开始(没有在推文之间设置均匀间隔的间隔),要么说我在广播时不能使用回调。服务器端代码如下:
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()
处理程序。
目前还不清楚你所说的"数据来得太快"是什么意思。 太快了什么? 如果它只是比你想要的显示速度快,那么你可以将推文存储在一个数组中,然后使用计时器来决定何时显示数组中的内容。
如果来自流的数据来得太快而无法存储,并且这是一个流动的nodejs流,那么您可以使用.pause()
方法暂停流,然后,当您能够再次访问时,您可以调用.resume()
。 有关详细信息,请参阅 http://nodejs.org/api/stream.html#stream_readable_pause。