【问题标题】:Node Socket.IO socket.on() across multiple files跨多个文件的节点 Socket.IO socket.on()
【发布时间】:2018-01-02 15:51:59
【问题描述】:

我在节点应用程序中使用 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 中的套接字作为第一个参数传递,但也许有更好的方法。

【问题讨论】:

  • 记录socket.id怎么样?
  • @asosnovsky 你能详细说明一下吗?
  • 看看socket.io的文档socket.io/docs/server-api/#socket-id
  • @asosnovsky 我知道,我要问的是如何在使用导出的on 函数时访问套接字对象。或者任何其他方式在不同的文件中注册套接字事件?

标签: javascript node.js sockets socket.io


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2018-01-14
    • 2013-08-11
    • 2013-05-12
    • 2018-07-18
    • 1970-01-01
    • 1970-01-01
    • 2013-11-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多