Sails.js Розетка.IO получение данных с окном временных рамок (setInterval)

#javascript #node.js #websocket #socket.io #sails.js

#javascript #node.js #websocket #socket.io #sails.js

Вопрос:

Привет, я начинаю использовать сокет.ввод -вывод с sails.js и я хотел бы знать, есть ли способ или наилучшая практика для получения данных, которые socket.emit (в моем контроллере) отправляет каждый раз, а не только один раз.. Я пытался использовать сокет.получить, но когда я печатаю значения в консоли, они появляются только один раз.

Я собираюсь использовать это в будущем, чтобы передавать данные клиенту для отслеживания статуса элемента, который я получаю из интерфейса REST в другом проекте.

Код контроллера

 my_event: function(req, res){
    var socket = req.socket;
    setInterval(function(){
      socket.emit('my_event', { content: 'data' })
    }, 5000)
  }
 

Код на стороне клиента

 var c = 0;
socket.get('/mycontroller/my_event',  function (json) {
    c = c  ;        
    console.log(json.content);
    console.log(c);

});
 

Я увидел на вкладке сеть (консоль Chrome), что я получаю данные с правильными временными интервалами.

Ответ №1:

Вы запускаете my_event действие для запуска setInterval и его повторения socket.emit , но вы никогда не прослушиваете событие на стороне клиента. Что вам нужно, так это:

 var c = 0;
// Bind a listener to the "my_event' socket event
socket.on('my_event', function(json) {
    c = c  ;        
    console.log(json.content);
    console.log(c);
});
// Call the backend action which will start triggering the events
socket.get('/mycontroller/my_event',  function (response) {
    console.log(response);
});
 

затем на внутреннем сервере my_event убедитесь, что вы завершаете его чем-то вроде

 res.json({status: 'ok!'});
 

если вы хотите сообщить, что socket.get вызов был успешным.

Комментарии:

1. Спасибо, я забыл попробовать это, поэтому событие было запущено, но у меня не было для него прослушивателя :/