代码之家  ›  专栏  ›  技术社区  ›  Vladislav Achramovic

节点套接字。IO插座。on()跨多个文件

  •  1
  • Vladislav Achramovic  · 技术社区  · 7 年前

    我在用插座。如果我希望捕获并响应不同文件中的套接字事件,我该如何做?

    我能够找到的一个解决方案是在设置套接字的文件中执行此操作。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});
    };
    

    这很好,唯一的问题是我无法访问socket对象,因此我不知道是哪个socket发出了事件。

    编辑

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

    1 回复  |  直到 7 年前
        1
  •  3
  •   jfriend00    7 年前

    根据代码的结构以及您可能希望重用或构造模块的方式,可以采用不同的方式来构造内容。以下是一些选择:

    1. 通过 io 到每个想要侦听传入套接字的模块构造函数。io事件,并让每个想要侦听消息的模块使用 io 创造自己的价值 io.on('connection', socket => { socket.on('someMsg', localHandler)} ); .

    2. 出口 io 从主插座。io模块,然后让每个想要侦听传入消息的模块 import/require() 主插座。io模块(用于获取 io 值),然后使用该值 io 创造自己的价值 io。on('connection',socket=>{socket.on('someMsg',localHandler)}); .

    3. 有你的主插座。io模块导出用于为传入套接字注册侦听器的函数。io消息,然后只有一条 io.on('connection', ...) 主套接字中的处理程序。侦听请求的所有事件的io模块。