#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. Спасибо, я забыл попробовать это, поэтому событие было запущено, но у меня не было для него прослушивателя :/