2015-04-11 7 views
2

Я хочу, чтобы прослушать новые записи в коллекции MongoDB на основе состояния и отправки их клиентам через Socket.ioMongoDb слушатель в Node.js

Как я вижу, это должно выглядеть примерно так:

var lastTime = Date.now(); 
while(true) { 
    getRecordsLaterThan(lastTime, function(results) { 
     if (results) { 
      for (let result of results) { 
       lastTime = result.created_on; 
       // send result via Socket.Io 
      } 
     } 
    }); 
    // sleep(200 ms) 
} 

Я совершенно новичок в Node и JS, и порой иногда трудно понять, что это поток выполнения. В этом случае невозможно определить, как сделать цикл сна после каждой итерации.

Также у меня есть сомнения, что, возможно, с Узлом это должно быть сделано совершенно по-другому.

+2

Заканчивать этот пакет: https://www.npmjs.com/package/ mongo-watch – JAM

+0

@JAM спасибо, но я считаю, что это не соответствует моим требованиям. Мне нужно прослушать коллекцию с конкретными условиями запроса, и я не вижу, как это можно сделать с помощью этой библиотеки. – Viacheslav

+0

Я думаю, что это может сработать для вашего сценария. Вместо опроса (как и сейчас, каждые 200 миллисекунд) вы можете сделать запрос, когда база данных изменится (используя mongo-watch), а затем решите, нужно ли транслировать результат с помощью socket.io. Это будет решение, основанное на событии, а также облегчение стресса с вашей базы данных и сервера. – JAM

ответ

0

После некоторого чтения я думаю, что я нашел, как это должно быть сделано таким образом, Узлом конкретного использования рекурсии и SetTimeout:

var lastTime = Date.now(); 

function listen() { 
    getRecordsLaterThan(lastTime, function(results) { 
     if (results) { 
      for (let result of results) { 
       lastTime = result.created_on; 
       // send result via Socket.Io 
      } 
     } 
    }); 
    setTimeout(listen, 200); 
} 

listen(); 
Смежные вопросы