Javascript 我可以将socket.io事件侦听器分为不同的模块吗?

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

我正在处理超过15个不同的socket事件,我想管理模块中与这些事件相关的某些socket.io事件

例如,我希望一个名为login.js的文件处理
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+个子事件。而且,由于现代应用程序中的资源量不同,以前的解决方案可能会变得非常麻烦。