提问人:FiFi 提问时间:4/12/2022 更新时间:4/12/2022 访问量:1191
如何将所有 socket.io 分隔到不同的文件中
How to separate all of socket.io to a different file
问:
现在,我有应用程序.js我有我常用的代码和 socket.io 代码。但我想做的是,将 socket.io 的每个代码分成 1 个不同的文件,并要求将 socket.io 代码从不同的文件集成到我的主应用程序中.js。有没有办法将 2/3 行代码写入我的应用程序.js以要求从不同的文件 socket.io?
注意:我不想将我的任何 socket.io 代码写入我的应用程序中.js所以我不知道是否可以要求('....')它从其他文件.js到我的应用程序中。理想情况下,希望将io.on('connection'){}中的所有内容分开
const express = require('express');
const http = require('http'); // socket.io is created upon http server. A way to create server
const cors = require('cors');
const {Server} = require('socket.io');
const app = express();
app.use(cors());
const server = http.createServer(app); // this is to create http server with express for socket.io
const io = new Server(server, {
cors: {
origin: "http://localhost:3000",
methods: ["GET", "POST"]
}
});
io.on("connection", (socket) => {
socket.on("newUser", (username) => {
addNewUser(username, socket.id);
console.log('connect print: '); printUsers();
})
socket.on("disconnect", () => {
removeUser(socket.id);
console.log('disconnect print: '); printUsers();
});
})
server.listen(3001, () => {
console.log('server listening on port 3001');
})
答:
3赞
arfi720
4/12/2022
#1
有几种方法可以做到这一点,但下面这样的东西应该可以工作。
在新文件中,用于导出包含要导出的任何函数或对象的对象:module.exports
//socketio.js
module.exports = {
getIo: (server) => {
const io = new Server(server, {
//...
});
io.on("connection", (socket) => {
//...
}
//your other functions
return io;
}
}
然后在 app.js 中,需要它并使用对象的属性:
//app.js
const socketio = require('./socketio.js');
//after creating your server etc
const io = socketio.getIo(server);
评论
2赞
FiFi
4/12/2022
非常感谢arf。如果有人遇到或觉得这有帮助,请对答案投赞成票。我没有足够的名声来自己铸造它。
0赞
arfi720
4/12/2022
很高兴它有帮助,FiFi。如果是这样,您应该能够接受答案是正确的。谢谢!
0赞
FiFi
4/12/2022
做。再次感谢。你介意也看看这个吗?过得很艰难。stackoverflow.com/questions/71842932/......
0赞
El7or
7/28/2022
@arfi720 如何将getBroadcast()或getSocket()添加到此文件以访问它以执行如下操作:socket.broadcast.to('game').emit('message', 'nice game');
评论