IwanQ
@IwanQ
Плохие времена часто дают прекрасные возможности

Как реализовать глобальный event в Socket.IO версии 4?

Доброго времени суток.

Есть задача создать глобальное событие в 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 но его реализация в пакете достаточно интересная:
61b04c37dd6ae476023779.png
  • Вопрос задан
  • 109 просмотров
Пригласить эксперта
Ответы на вопрос 1
IwanQ
@IwanQ Автор вопроса
Плохие времена часто дают прекрасные возможности
io.engine.on('globalEvent', () => {
  // handler
});

// trigger
io.engine.emit('globalEvent', 'some data');
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы