Node.js Socket.io项目类的OO结构

Node.js Socket.io项目类的OO结构,node.js,socket.io,Node.js,Socket.io,我在构建node.js socket.io项目时遇到问题。 用户可以加入聊天室。游戏室有一个队列,玩家可以在那里排队等待游戏。如果有足够多的人排队,他们就会被扔进游戏大厅。聊天室实现了聊天功能,应该在游戏室和大厅中使用 现在,我将io对象传递给实例化,并使用它来侦听特定于其类特性的事件 我能做些什么改进?为什么这是一个坏的或好的设计选择?还有什么替代方案?有什么要考虑的? 我是否应该将“Room”、“Gameroom”和“Lobble”类划分为一个更独特的模型和控制器 我知道这是一个相当“讨论性

我在构建node.js socket.io项目时遇到问题。 用户可以加入聊天室。游戏室有一个队列,玩家可以在那里排队等待游戏。如果有足够多的人排队,他们就会被扔进游戏大厅。聊天室实现了聊天功能,应该在游戏室和大厅中使用

现在,我将io对象传递给实例化,并使用它来侦听特定于其类特性的事件

我能做些什么改进?为什么这是一个坏的或好的设计选择?还有什么替代方案?有什么要考虑的? 我是否应该将“Room”、“Gameroom”和“Lobble”类划分为一个更独特的模型和控制器

我知道这是一个相当“讨论性”的问题,但我愿意听取每一个意见。谢谢

服务器实例化房间

const io = socket.listen(
    http.createServer(app).listen(8080)
  );

console.log('Server listening..');

app.get('/', function (req, res) {
    res.sendFile(__dirname + '/test.html');
  });

var main = new Room('', io);
var a = new Gameroom('a', io);
var b = new Gameroom('b', io);
Room是父类,但也可以实例化。它应该是一个根通道,每个人在登录时都会加入

class Room {
  constructor(name, io) {
    this.name = name;
    this.users = [];
    this.namespace = io.of('/' + name);
    this.listenOnRoom();
  }

  listenOnRoom() {
    this.namespace.on('connection', (socket) => {
      ...

      socket.on('disconnect', (msg) => {
        ...
      });

      socket.on('chatMessage', (msg) => {
        ...
      });
    });
  }
}
module.exports = Room;
Gameroom增加了排队等待游戏的功能

class Gameroom extends Room {
  constructor(name, io) {
    super(name, io);
    this.io = io;
    this.queue = [];
    this.lobbies = [];
    this.listenOnGameroom();
  }

  listenOnGameroom() {
    this.namespace.on('connection', (socket) => {

      socket.on('userJoinQueue', () => {
        ...
        this.lobbies.push(new Lobby(this.name ,lobbyId, participants, this.io));
      });

      socket.on('userLeaveQueue', () => {
        ...
      });

      socket.on('userLeaveLobby', () => {
        ...
      });
    });
  }
}

module.exports = Gameroom;
当队列中有足够的玩家时,游戏室将实例化大厅

class Lobby extends Room {
  constructor(gameroom, name, users, io) {
    super(gameroom + '/' + name, io);
    this.users = users;
    this.readyUsers = [];
    this.listenOnLobby();
  }

  listenOnLobby() {
    this.namespace.on('connection', (socket) => {

      socket.on('userReady', () => {
        ...
      });

      socket.on('userUnready', () => {
        ...
      });
    });
  }
}

module.exports = Lobby;

如果此代码有效,并且您正在寻找改进的方法,那么它可能属于(在您阅读了那里的发布规则之后)。谢谢!我甚至不知道它的存在。是的,到目前为止,它还可以正常工作。