Я создавал приложение в течение нескольких месяцев, и я взломал способ, чтобы мой экземпляр socket.io был разделен между несколькими модулями, где это требуется.Метод, которым я пользуюсь, чтобы поделиться им, был непоследователен, и на трехдневных выходных я хотел реорганизовать его в более элегантный подход.После поиска SO в течение последних нескольких дней и попыток использовать другие методы обмена данными, у меня закончились идеи.
Я создал новый файл NodeJs "debug.js", и в нем я импортирую экземпляр socket.io, который был успешно использован совместно с моими конечными точками основного сокета и другим файлом.В этом файле я делаю две простые вещи.1. Я делаю эмитт, который никогда не принимается на стороне клиента.2. Я пытаюсь записать значение 'io' в вызов функции, которая никогда не срабатывает.
debug.js
const io = require('./../main/index.js');
io.emit('test');
function test() {
console.log('io logged')
console.log(io);
}
test();
io.on('debug', function(socket){
console.log('test')
})
Из того, что я читал о загрузке и кэшировании в узле, я думаю, что этот модуль даже не работает.А в других случаях, таких как
sockets.js
var sockets;
module.exports = {
start: function (io) {
sockets = io;
io.on('connection', function (socket) {
this.io = socket;
socket.on('validatePlaceAction', function (data) {
//do stuff and things
});
}.bind(this));
},
io: null
}
, иногда возможность совместно использовать io через свойство 'io', а иногда нет, связана с тем, как файлызагружен.Моя конечная цель состоит в том, чтобы иметь согласованный способ отправки событий socketio для предоставления обновлений в реальном времени моему клиенту, в приведенном выше примере «validatePlaceAction» возвращает логическое значение, определяющее, будет ли клиент загружать событие, или событие onclick будет вспыхивать.
index.js
const http = require('http');
const app = require('./server/routes.js');
const server = app.listen(8080, function () { console.log('port 8080 is live!'); });
const socketio = require('socket.io');
const io = require('./server/sockets');
let sockets = socketio.listen(server);
const socket = io.start(sockets);
io.start передает экземпляр сокета в свойство, которое затем имеет всю логику сокета, которая выглядит не совсем правильно.Главным образом потому, что я не могу повернуться и поделиться этой логикой с другими файлами.Кажется, я что-то упускаю в этом, но методом проб и ошибок не ясно, что.