当前位置: 首页 > 面试题库 >

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

温翔宇
2023-03-14
问题内容

我正在处理15个以上的套接字事件,我想在与那些事件相关的模块中管理某些socket.io事件。

例如,我想让一个名为login.js的文件处理login套接字事件,一个名为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("register", function (data) { ...一个文件client.on("login", function (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);
});


 类似资料:
  • 是否可能有一个全局鼠标运动监听器,根据点击的JPanel的内容而具有不同的效果(仅使用一个鼠标运动监听器)? 例如:我有一个JFrame,其中添加了两个JPanel,并在JFrame中添加了一个鼠标运动监听器。当我点击一个JPanel时,我希望屏幕能够调整大小,但当我点击另一个JPanel时,我希望JFrame能够被拖动。我认为这可以通过使用JLabel来完成,使用JLabel的文本进行检查,与J

  • 我有一个应用程序,其中不同的用户监听服务器发送的事件源以获得定期响应。我打算从服务器发送响应,并以json格式发送相应的Id和数据。在客户端,当数据到达时,每个客户端都会检查匹配的Id,如果发现,则处理数据,否则忽略它。但这种方法的缺陷在于,每个用户都从定期更新中获得数据,即使这些数据不是为他们准备的。我读了一些关于sse的文章,但找不到任何关于这方面的信息 我的问题是使用服务器端事件是否有任何方

  • 问题内容: 我想用JLabel替换JButton,并且希望我的代码在单击JLabel时执行一些操作。 当我拥有JButton时,我使用动作侦听器来处理按钮的单击: 当我替换为时,我在Eclipse中收到以下错误消息: 对于JLabel类型,未定义方法addActionListener(ChipsListener) 但我确实知道应该可以将单击处理程序附加到JLabel。有人知道该怎么做吗? 问题答案

  • 问题内容: 例如,我的想法是: File1.js File2.js 这段代码是用于节点服务器的,此代码会出现问题吗? 问题答案: 不,只需使用相同的“ io”对象。 File1.js File2.js app.js index.html

  • 我的代码使用jQuery。我有一个密码输入框,我想要得到输入的密码任何时候。 下面是我的代码: 我确信这是一个正确的代码,因为当我在浏览器的控制台中输入它时,它可以工作,但当我重新加载页面时,它就不工作了 我能做什么?

  • 从元素中移除事件侦听器。 使用 EventTarget.removeEventListener() 从元素中删除一个事件监听器。 省略第四个参数 opts ,则默认使用 false 或者根据添加事件监听器时使用的选项来指定它。 const off = (el, evt, fn, opts = false) => el.removeEventListener(evt, fn, opts); con