使用 socket.io 连接作为模块
Using socket.io connection as a module
我通过 Rabbitmq 创建了一个队列系统,并通过套接字向用户发送通知。基本上有3个文件。
-index.js //some functions to save data and send to Rabbitmq
-socket.js //socket io modules
-consumer.js //some functions to consume data from Rabbitmq
当 npm 运行 index.js 和 consumer.js 启动时。
index.js
const Express = require('express');
const app = Express();
//init server
server = app.listen(3000);
//init socket io
require('./socket').initialize(server);
socket.js
const sio = require('socket.io');
let io;
module.exports = {
//Initialize the socket server
initialize: (server) => {
io = sio(server, {
cors: {
origin: '*',
}
});
io.on('connection', (socket) => {
console.log('New client connected with id = ', socket.id);
socket.on('disconnect', () => {
console.log("User disconnected");
});
});
},
//return the io instance
getInstance: () => {
return io;
}
}
consumer.js
const socket = require('./socket');
const io = socket.getInstance();
console.log("io", io);
//io is undefined
Io returns 在 consumer.js 中未定义。哪里错了?
在有人先呼叫 socket.initialize()
之前,您不能呼叫 socket.getInstance()
。
您没有显示 consumer.js
的加载位置,因此我们无法了解模块加载的完整顺序,但似乎 consumer.js
在您初始化套接字之前就已加载,因此它正在尝试在要获取套接字实例之前调用 socket.getInstance()
。
当使用 return 声明从以前的方法构建的方法时,以正确的顺序调用事物显然很重要。
我通过 Rabbitmq 创建了一个队列系统,并通过套接字向用户发送通知。基本上有3个文件。
-index.js //some functions to save data and send to Rabbitmq
-socket.js //socket io modules
-consumer.js //some functions to consume data from Rabbitmq
当 npm 运行 index.js 和 consumer.js 启动时。
index.js
const Express = require('express');
const app = Express();
//init server
server = app.listen(3000);
//init socket io
require('./socket').initialize(server);
socket.js
const sio = require('socket.io');
let io;
module.exports = {
//Initialize the socket server
initialize: (server) => {
io = sio(server, {
cors: {
origin: '*',
}
});
io.on('connection', (socket) => {
console.log('New client connected with id = ', socket.id);
socket.on('disconnect', () => {
console.log("User disconnected");
});
});
},
//return the io instance
getInstance: () => {
return io;
}
}
consumer.js
const socket = require('./socket');
const io = socket.getInstance();
console.log("io", io);
//io is undefined
Io returns 在 consumer.js 中未定义。哪里错了?
在有人先呼叫 socket.initialize()
之前,您不能呼叫 socket.getInstance()
。
您没有显示 consumer.js
的加载位置,因此我们无法了解模块加载的完整顺序,但似乎 consumer.js
在您初始化套接字之前就已加载,因此它正在尝试在要获取套接字实例之前调用 socket.getInstance()
。
当使用 return 声明从以前的方法构建的方法时,以正确的顺序调用事物显然很重要。