Узел Socket.IO socket.on () для нескольких файлов

Я использую Socket.IO в узле приложения, и я хочу поймать и ответить на события сокета в разных файлах, как это сделать?

Одним из решений, которое я смог найти, было сделать это в файле, который устанавливает socket.io:

var events = []; module.exports.setup = (server) => { io = require('socket.io')(server); console.log("Socket.io setup complete"); io.on('connection', (socket) => { for(let e of events){ socket.on(e.event, e.callback); } }); }; module.exports.on = (event, callback) => { events.push({event: event, callback: callback}); }; 

Это работает очень хорошо, единственная проблема заключается в том, что я не могу добраться до объекта сокета, поэтому я не знаю, какой сокет выбрал событие.

РЕДАКТИРОВАТЬ

Ну, я думаю, еще один способ – передать сокет в cb в качестве первого аргумента, но, возможно, есть лучший способ.

Существуют различные способы структурирования вещей в зависимости от того, как структурирован ваш код и как вы можете повторно использовать или структурировать свои модули. Вот некоторые из вариантов:

  1. Передайте io каждому конструктору модуля, который хочет прослушивать входящие события socket.io и каждый модуль, который хочет прослушать сообщение, использовать это значение io для создания своего собственного io.on('connection', socket => { socket.on('someMsg', localHandler)} ); ,

  2. Экспортируйте io из основного модуля socket.io, а затем каждый модуль, который хочет прослушать входящее сообщение import/require() основного модуля socket.io (чтобы получить значение io ), а затем использовать это значение io для создания собственного io.on('connection', socket => { socket.on('someMsg', localHandler)} ); ,

  3. Попросите свой основной модуль socket.io экспортировать функцию для регистрации прослушивателя для входящего сообщения socket.io, а затем просто иметь один io.on('connection', ...) в вашем основном модуле socket.io, который прослушивает все события, которые были запрошены.