我正在使用node和socket 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);
});
答案 0 :(得分:0)
我认为你误解了.on()
对流有用的方式。这是一个事件处理程序。一旦安装完毕,它就在那里,流可以随时给你打电话。你的间隔实际上只是让事情变得更糟,因为它正在安装多个.on()
处理程序。
目前还不清楚“数据过快”的含义。什么太快了?如果它只是比您想要显示它更快,那么您可以将推文存储在一个数组中,然后使用计时器来决定何时从数组中显示内容。
如果来自流的数据来得太快甚至无法存储且这是一个流动的nodejs流,那么您可以使用.pause()
方法暂停流,然后,当您再次进入时,可以致电.resume()
。有关详细信息,请参阅http://nodejs.org/api/stream.html#stream_readable_pause。