Node.js Socket.io项目类的OO结构
我在构建node.js socket.io项目时遇到问题。 用户可以加入聊天室。游戏室有一个队列,玩家可以在那里排队等待游戏。如果有足够多的人排队,他们就会被扔进游戏大厅。聊天室实现了聊天功能,应该在游戏室和大厅中使用 现在,我将io对象传递给实例化,并使用它来侦听特定于其类特性的事件 我能做些什么改进?为什么这是一个坏的或好的设计选择?还有什么替代方案?有什么要考虑的? 我是否应该将“Room”、“Gameroom”和“Lobble”类划分为一个更独特的模型和控制器 我知道这是一个相当“讨论性”的问题,但我愿意听取每一个意见。谢谢 服务器实例化房间Node.js Socket.io项目类的OO结构,node.js,socket.io,Node.js,Socket.io,我在构建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;
如果此代码有效,并且您正在寻找改进的方法,那么它可能属于(在您阅读了那里的发布规则之后)。谢谢!我甚至不知道它的存在。是的,到目前为止,它还可以正常工作。