2015-01-24 3 views
0

Я использую узел и сокет io для передачи твиттера в браузер, но поток слишком быстр. Чтобы замедлить работу, я пытаюсь использовать setInterval, но это либо задерживает начало потока (без установки равномерно интервалов между твитами), либо говорит, что я не могу использовать обратные вызовы при трансляции. Сервер код стороны ниже:Использование обратных вызовов с Socket IO

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

Ваша функция запуска прикрепляет слушателя к потоку. Когда слушатель подключен, сокет будет генерировать события так же быстро, как и их прием. Чтобы освободить ваши вызовы emit(), вам нужно создать какую-то очередь или приостановить и возобновить поток. –

ответ

0

Я думаю, вы недоразумение как .on() работаете для потоков. Это обработчик событий. Как только он будет установлен, он будет доступен, и поток может позвонить вам в любое время. Ваш интервал на самом деле просто ухудшает ситуацию, потому что он устанавливает несколько обработчиков .on().

Непонятно, что вы подразумеваете под «данными, поступающими слишком быстро». Слишком быстро для чего? Если это просто быстрее, чем вы хотите отобразить, вы можете просто сохранить твиты в массиве, а затем использовать таймеры, чтобы решить, когда отображать вещи из массива.

Если данные из потока приходит слишком быстро, чтобы даже хранить и это течет nodejs поток, то вы можете приостановить поток с помощью метода .pause(), а затем, когда вы в состоянии пойти снова, вы можете позвонить .resume() , См. http://nodejs.org/api/stream.html#stream_readable_pause для получения дополнительной информации.

Смежные вопросы