Socket.io - emit из контроллера
Я начал изучать socket.io и попробовал кое-что сделать.
Вот так выглядит основной файл где инициализируется соединение с сокетом: var log = require("core/lib/log")(module); module.exports = function(server){ var io = require('socket.io')(server); io.set('origins','*:*'); //io.set('origins','localhost:*'); io.sockets.on('backend-msg', (data) => { var clients = io.sockets.clients(); clients.forEach(function(client) { client.emit("backend-msg",data); }); }); io.sockets.on('connection', (socket) => { log.info("Socket is connect"); socket.on('msg', (data) => { log.info(data); socket.emit('msg',{text:'server say:' + new Date()}); }); socket.on('disconnect', function() { log.info("Socket is disconnect"); }); }); return io; }; При этом все события что внутри connect нормально работают. В контроллере я получаю io из app: var io = this.Req.app.get('io'); После чего пытаюсь вызвать событие 'backend-msg' которое отправит всем клиентам сообщение io.sockets.$emit('backend-msg','Hello ' + this.Req.session.LOGIN); И он мне говорит что: io.sockets.$emit is not a function а если сделать io.sockets.emit (без знака $), то совсем ничего не происходит... Можете поправить меня и объяснить где я делаю ошибку? Я подобный пример видел в сети, пытаюсь подойти к изучению работы сокетов и мне нужна какая-то точка от которой я могу оттолкнуться... премного вам благодарен) |
рабочий пример
var clients = 0; io.on('connection', (socket) => { clients++; console.log('connect: '+ clients); socket.emit('news',{value: 'connect: '+ clients}); //to client io.sockets.emit('news',{value: 'Hi all !'});// to all socket.on('disconnect', () => { clients--; console.log('disconnect: '+ clients); }); socket.on('error', (err) => { console.log(err); }); }); |
Часовой пояс GMT +3, время: 06:52. |