多个文件"/>
Socket.IO服务器端多个文件
我有一个nodejs后端和一个React前端。在nodejs上,我设置了socketio,在客户端上,我在App组件中具有连接,并使用上下文向下传递。现在,使用钩子,我可以全局使用io变量,并在客户端侦听事件。
但是,在服务器端,我也可以全局使用此IO变量,但是如何在多个页面上使用它呢?我在server.ts中有此代码:
const io = //initialize io
io.on('connection', (socket: any) => {
console.log('a user connected', socket.handshake.query);
socket.on('disconnect', () => {
console.log('user disconnected');
});
io.on('test', console.log);
});
但是,在另一个文件中,我必须再次使用io.on()
初始化我的连接。如何解决这个问题?我有一个名为foo.controller.ts的文件,它在foo周围有一些动作。在此文件中,我想监听与foo相关的所有事件。
创建新文件,例如socket.instance.js
,然后创建类来处理所有套接字的逻辑,例如存储套接字列表或其他内容(取决于您的需要);
这里是socket.instance.js
的示例:
class SocketInstance {
io = require('socket.io')();
sockets = new Set();
constructor() {
this.io.listen(process.env.PORT);
this.io.on('connect', socket => {
this.sockets.add(socket);
this.handleNewSocket(socket);
socket.on('disconnect', () => {
this.sockets.delete(socket);
})
});
}
handleNewSocket(socket) {
// logic here
}
}
const socketInstance = new SocketInstance();
module.exports = {socketInstance}
然后在任何其他文件中,您都可以像这样访问此实例:
// anotherServerFile.js
const socketInstance = require('./socket.instance').socketInstance;
socketInstance.io.emit('hello');
这只是基本示例,说明如何在代码中的任何其他类/文件之间共享套接字服务器实例。一切都取决于您的需求
与前端情况有些相似
更多推荐
Socket.IO服务器端多个文件
发布评论