Node.jsサーバーに接続しているユーザーがいて、ユーザーが参加すると、ロビー(基本的にはキュー)に追加します。ロビーに2人のユーザーがいるときはいつでも、ペアにしてロビーから削除してもらいたいです。つまり、基本的には単純なキューです。
無限ループ(呼び出し内で開始)を持つLobby.runメソッドを使用してこれを実装することから始めましprocess.nextTick
た。キューに3つ以上のエントリがあるときはいつでも、それらをキューから削除します。しかし、これは私の記憶をすべて食い尽くしており、このような無限ループは一般的にお勧めできません。
私は今、経由でイベントを発行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
});
}
}
私が言ったように、これは同期を考慮していません。複数のユーザーが同時にロビーに参加できるため、イベントリスナーは、1人のユーザーを1人ではなく、他の複数のユーザーとペアにする場合があります。
Node.jsの経験が豊富な人に、このイベントベースのアプローチに関心を持つのが正しいかどうか教えてもらえますか?このアプローチを改善するための洞察をいただければ幸いです。