javascript - 需要将socket.io类更改为singleton

标签 javascript node.js sockets socket.io singleton

使 socket.io 成为单例的最佳方法是什么?这里我有三个文件,我需要在user.mjs

中使用socket.io方法

socket.mjs

class socketBusiness extends baseBusiness {
  //io = null;
  //connectedUsers = {}
  constructor(io) {
    super(io);
    this.io = io;
    this.connectedUsers = {};
    this.addUserRef= {}; 
    this.bindEvents();
  }

  bindEvents() {
    this.io.on("connection", this.onConnection);

    this.io.use(this.onBeginConnection);
  }
  unBindEvents() {
    this.io.off("connection", this.onConnection);
  }

  onConnection(socket) {
    let _io = this.io;
    let socketId = socket.id;


    socket.on("disconnect", reason => {
    });

    socket.on("chat message", function(msg) {
    });
  }
 addUserRef(userId, cstId) {

      let arr = this.addUserRef[cstId] || [];
      if (arr.indexOf(cstId) < 0) {
        arr.push(cstId);
      }
      this.addUserRef[userId] = arr; 
  }
}
export default socketBusiness;

用户.mjs

const socket = require("socket.mjs)
export async function addCst(req, res) {
socket.addUserRef(req.id,req.cstId)
}

我如何访问socket.io方法?任何帮助将不胜感激

www.mjs

import socket from '../socket.mjs';


var server = createServer(app);
var io = new SocketServer(server, {})
var sb = new socketBusiness(io);

最佳答案

导出实例:

 export default new socketBusiness;

如果导出单例,则无法在构造函数中传递 io。将初始化逻辑移至方法中:

constructor() { }

init(io) {
  this.io = io;
  this.bindEvents();
}

然后,在获得套接字时初始化单例:

var io = new SocketServer(server, {})
socket.init(io);

关于javascript - 需要将socket.io类更改为singleton,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58371508/

相关文章:

javascript - 带有 "method could be static"警告的方法在 JavaScript/TypeScript 中是否被视为错误形式?

javascript - 从jquery触发d3点击

javascript - 从 Promise 解析调用传回数据

javascript - 通过 NodeJS 运行 Java 函数

api - UDP 使用套接字 API

c# - 增加套接字客户端中的内存使用率

sockets - node.js/socket.io 是否有最大消息/事件大小

javascript - 当在 Array of Arrays 中找到时,您将如何搜索属性名称并更改(删除)它?

javascript - 使用带有 flutter 的js全局文本替换代码

javascript - 找不到 express - `-bash: express: command not found`