Доброго времени суток.
Есть задача создать глобальное событие в Socket.IO на стороне сервера и иметь возможность триггерить его. Тоже со стороны сервера.
Посмотрел
решение в скринкасте от Ильи Кантора.
Не смог определить версию пакета Socket.IO, но решение выглядит крайне просто:
module.exports = function(server) {
var io = require('socket.io').listen(server);
// other code
// global event
io.sockets.on('session:reload', function(sid) {
// code
});
}
И вот как он это глобальное событие (session:reload) триггерит:
io.sockets.$emit("session:reload", sid);
В версии Socket.IO 4 вообще нет функции $emit.
Я пробовал:
io.on('GlobalEvent', (greetings) => {
console.log(`Got socket with greetings ${greetings}`);
});
setTimeout(() => {
io.emit('GlobalEvent', 'Hello from GlobalEvent!');
console.log('setTimeout emit sent');
}, 500);
И так:
io.sockets.on('GlobalEvent', (greetings) => {
console.log(`Got socket with greetings ${greetings}`);
});
setTimeout(() => {
io.sockets.emit('GlobalEvent', 'Hello from GlobalEvent!');
console.log('setTimeout emit sent');
}, 500);
Но так и не смог добиться результата. Console log в setTimeout срабатывает, но Socket'ы его не ловят.
Если кто-то знает решение данного вопроса, напишите его пожалуйста. Заранее спасибо
UPD: Нашел событие
serverSideEmit но его реализация в пакете достаточно интересная: