Javascript 我可以将socket.io事件侦听器分为不同的模块吗?
我正在处理超过15个不同的socket事件,我想管理模块中与这些事件相关的某些socket.io事件 例如,我希望一个名为login.js的文件处理Javascript 我可以将socket.io事件侦听器分为不同的模块吗?,javascript,node.js,sockets,socket.io,Javascript,Node.js,Sockets,Socket.io,我正在处理超过15个不同的socket事件,我想管理模块中与这些事件相关的某些socket.io事件 例如,我希望一个名为login.js的文件处理loginsocket事件,一个名为register.js的文件处理注册套接字事件 index.js: socket.on("connection", function (client) { console.log("Client connected to socket!"); client.on("login", functio
login
socket事件,一个名为register.js的文件处理注册套接字事件
index.js:
socket.on("connection", function (client) {
console.log("Client connected to socket!");
client.on("login", function (data) {
validate(data){
socket.sockets.emit("login_success", data);
}
});
client.on("register", function (data) {
register(data){
socket.sockets.emit("register_success", data);
}
});
});
是否有一种方法可以将
client.on(“注册”,函数(数据){…
放在一个文件中,将client.on(“登录”,函数(数据){…
放在另一个文件中?是的,您可以使用导出和要求
退房。这里有一种方法
socket.on("connection", function (client) {
console.log("Client connected to socket!");
require('./login')(socket, client);
require('./register')(socket, client);
});
login.js
module.exports = function(socket, client) {
client.on("login", function (data) {
validate(data){
socket.sockets.emit("login_success", data);
}
});
};
我通常将各种与客户机相关的功能(我通常称之为处理程序)拆分为单独的模块,然后require
并在创建socket.io连接的任何文件中使用它们
下面是一个示例模块,该模块导出一个函数,该函数将被传递给socket.io客户端:
/* register-handler.js */
module.exports = function (client) {
// registration related behaviour goes here...
client.on('register', function (data) {
// do stuff
});
};
由创建新套接字、侦听连接并将其传递给处理程序的文件使用,然后处理程序侦听客户端上的事件
/* main.js */
// require your handlers
var handleRegister = require('./register-handler');
// .. set up socket.io
socket.on('connection', function (client) {
// register handlers
handleRegister(client);
});
这很简单
// export from your handler file:
exports.myHandler = socket => data => { // the socket object is available due to closure }
// import in your socket app.js file
import { myHandler } from './handlers/mySocketHandler'
// now just call the myHandler function.
// pass the socket object from the app.js file and it will return a handler function
socket.on('message', myHandler(socket))
我认为这是最好的答案。被接受的答案无论如何都没有错。但是,有了这个解决方案,您只需要求每个模块,它就可以在不阻塞“配置”的情况下处理其事件区域。通过WebSocket使用CRUD之类的工具,每个事件可以有4+个子事件。而且,由于现代应用程序中的资源量不同,以前的解决方案可能会变得非常麻烦。