我有用户连接到 Node.js 服务器,当他们加入时,我将他们添加到 Lobby(本质上是一个队列)中。每当大厅中有 2 个用户时,我希望他们配对并从大厅中删除。所以本质上,它只是一个简单的队列。
我首先尝试使用 Lobby.run 方法来实现这一点,该方法具有无限循环(在process.nextTick
调用中开始),并且只要队列中有两个以上的条目,我就会将它们从队列中删除。然而,我发现这正在吃掉我所有的记忆,而且像这样的无限循环通常是不明智的。
我现在假设通过发出事件EventEmitter
是要走的路。但是,我担心的是同步。假设我的大厅非常简单:
Lobby = {
users: []
, join: function (user) {
this.users.push(user);
emitter.emit('lobby.join', user);
}
, leave: function (user) {
var index = this.users.indexOf(user);
this.users.splice(index, 1);
emitter.emit('lobby.leave', user);
}
};
现在基本上我假设我想观察加入大厅的用户并将他们配对,可能是这样的:
Lobby = {
...
, run: function () {
emitter.on('lobby.join', function (user) {
// TODO: determine if this.users contains other users,
// pair them off, and remove them from the array
});
}
}
正如我所提到的,这不考虑同步。多个用户可以同时加入大厅,因此事件侦听器可能会将单个用户与多个其他用户配对,而不是只配对一个。
有更多 Node.js 经验的人可以告诉我关注这种基于事件的方法是否正确?任何改进这种方法的见解将不胜感激。