Как сделать объект сокетов глобальным для всех воркеров в ноде?
У меня игра на сокетах. Из-за перенагрузки хочу сделать оптимизацию и сейчас курю про кластеры. В игре требуется постоянно показывать текущий онлайн, пользователи могут делать эмиты другим совершенно рандомным юзерам. Но как я читал воркер это новый изолированный скрипт и сокеты разделяются по разным портам. Как мне считать общий онлайн и просто доставать нужный io.sockets.connected?
Как вариант - в общем для всех редисе хранить для каждого воркера своё значение онлайна, а при выводе онлайна - суммировать по всем воркерам и выводить. Обновлять значение не обязательно в реалтайме после каждого коннекта/дисконнекта (т.к. смысла знать точный онлайн обычно нет), можно и с периодичностью в несколько минут
Но онлайн это только начало. У меня есть биржа между пользователями, когда пользователь покупает у другого им обоим нужно сделать эмиты покупок и нового счета.
То есть придётся еще сохранять в редисе воркер юзера и чтобы делать эмит в сокете сначала делать process.send в воркере, в кластере делать нужному воркеру worker.send, в воркере ловить запрос и делать socket.emit?))