1

バックエンドが NodeJS で記述され、リアルタイム通信に socket.io を使用するゲームを開発しています。

私のゲームの特徴の 1 つはマッチメイキングです。基本的に、2 人以上のプレイヤーがマッチメイキング期間にある場合、私のアプリケーションはそれらのプレイヤー用のゲーム ルーム (特別な socket.io ルーム) を作成し、ゲームを開始します。

これを行うには、次の 2 つの方法があります。

  • NodeJS で setInterval を作成します。インターバルでは、playersInMatchmaking 配列を確認します。アレイに 2 人以上のプレーヤーがいる場合は、ゲーム ルームを作成します。サーバーがオンラインである限りループします。

  • setInterval に依存する代わりに、socket.on("matchmaking start")またはsocket.on("matchmaking stop")

特定のアプローチを使用する利点はありますか? setInterval はソケット ロジックからマッチメイキング アルゴリズムを切り離すことができるため簡単に思えますが、マッチメイキング アルゴリズムはソケット イベントではなくループで実行されるため、パフォーマンスは低下します。

どう思いますか?他にもっとうまくいくアイデアはありますか?

4

1 に答える 1

2

イベントを使用することで、socket.io とリアルタイム通信を最大限に活用できます。アルゴリズムを切り離す以外に理由がない場合は、イベントを使用する必要があります。現在、マッチに参加または検索しているユーザー/プレイヤーがいない場合、ループを何度も実行する理由はありません。

間隔が十分に短くない場合 (たとえば 5 秒)、Player1 がキューに入れられ、Player2 もキューに入れられ、2 つの間隔の間に Player1 が待つのに疲れたために対戦相手の検索をキャンセルしたときに何が起こるかを検討します。 . したがって、あなたが言及したもの(パフォーマンス)以外のイベントトリガーシステムの主な利点は、実際の遅延がなく(ネットワーク、コードループ、ジッターなどを除く)、物事がすぐに起こることです。

于 2016-09-16T10:23:37.223 に答える