【问题标题】:Using callbacks with Socket IO通过 Socket IO 使用回调
【发布时间】:2015-03-23 04:21:06
【问题描述】:

我正在使用节点和套接字 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);

    });

【问题讨论】:

  • 您的启动函数正在将侦听器附加到流。连接监听器后,套接字将发出与接收事件一样快的事件。要间隔您的 emit() 调用,您需要创建某种队列,或者通过暂停和恢复您的流。

标签: node.js twitter socket.io twitter-streaming-api


【解决方案1】:

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

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

如果来自流的数据来得太快,甚至无法存储,并且这是一个流动的 nodejs 流,那么您可以使用 .pause() 方法暂停流,然后,当您能够再次访问时,您可以调用.resume()。请参阅http://nodejs.org/api/stream.html#stream_readable_pause 了解更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-31
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-19
    • 2021-12-04
    • 1970-01-01
    相关资源
    最近更新 更多