javascript - Node Socket.IO socket.on() 跨多个文件

标签 javascript node.js sockets socket.io

我在 Node 应用程序中使用 Socket.IO,并且希望捕获并响应不同文件中的套接字事件,我该怎么做?

我找到的一个解决方案是在设置 socket.io 的文件中执行此操作:

var events = [];
module.exports.setup = (server) => {
  io = require('socket.io')(server);
  console.log("Socket.io setup complete");
  io.on('connection', (socket) => {
    for(let e of events){
      socket.on(e.event, e.callback);
    }
  });
};

module.exports.on = (event, callback) => {
  events.push({event: event, callback: callback});
};

这工作得很好,唯一的问题是我无法到达套接字对象,因此我不知道哪个套接字发出了事件。

编辑

好吧,我想另一种方法是将 cb 中的套接字作为第一个参数传递,但也许有更好的方法。

最佳答案

有不同的方法来构建事物,具体取决于代码的结构方式以及您可能希望如何重用或构建模块。以下是一些选择:

  1. 密码 io对于每个想要监听传入的 socket.io 事件并让每个想要监听消息的模块的构造函数,使用 io创造自己的值(value)io.on('connection', socket => { socket.on('someMsg', localHandler)} ); .

  2. 导出io从你的主 socket.io 模块,然后让每个想要监听传入消息的模块 import/require()主 socket.io 模块(获取 io 值),然后使用 io创造自己的值(value)io.on('connection', socket => { socket.on('someMsg', localHandler)} ); .

  3. 让您的主 socket.io 模块导出一个函数,用于为传入的 socket.io 消息注册监听器,然后只有一个 io.on('connection', ...)主 socket.io 模块中的处理程序监听所有请求的事件。

关于javascript - Node Socket.IO socket.on() 跨多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48063925/

相关文章:

javascript - 如何在新的 @sentry/node API 中包含标签?

java - Apache HTTPD 关闭连接或不将请求重定向到 servlet 容器

java - 负载均衡器通过 TCP 并使用 TLS 协议(protocol)传递消息

javascript - 语法错误: unterminated string literal javascript console

javascript - Firefox 和 ie11 中的多点触控支持

node.js - gitlab-ci 构建 grpc 失败

javascript - 在 MongoDB/Node.js 中使用 findOneAndUpdate 自动递增值的问题

c - 为什么 TCP 服务器套接字意外关闭?

javascript - 是否可以使用 HTML5 或 jquery 中的坐标在网页中进行导航?

javascript - 如何改变这个iframe内容?