Как получить список всех сокетов из любого воркера socket.io
решил я значит масштабировать своё приложение на NodeJS с помощью кластеров на pm2.
Допустим, у меня есть 4 воркера
И я хочу слать event определённому сокету из любого из воркеров
Мне нужно как-то получать ВСЕ сокеты на ВСЕХ воркерах из ЛЮБОГО воркера, чтобы искать нужный и использовать emit
Например:
function getAllSocketsFromAllWorkers() {
return allSockets;
}
const allSockets = getAllSocketsFromAllWorkers();
const socket = allSockets.find(socket => socket.userId === 123123);
socket.emit('notification', 'Hello!');
Код на стороне сервера:
const SocketIO = require('socket.io');
const redis = require('socket.io-redis');
const io = SocketIO(3000);
io.adapter(
redis({
host: 'localhost',
port: 6379
})
);
io.on('connection', (socket) => {
console.log('NEW CONNECTION');
const userId = socket.handshake.query.userId;
if (!userId) {
socket.emit('userId is not defined', null);
socket.disconnect();
return;
}
socket.userId = userId; // userId === 123123
});