ラウンドで動作するターン ベースのマルチプレイヤー ゲームを作成しています。基本的に、プレイヤーが試合を主催し、別の人がそれに参加して、ゲームが始まります。サーバーはこれらの一致を処理し、5 秒ごとにクライアントに更新を提供する必要があります。私は通常、これを timer/a thread.sleep() で行います。私の問題は、複数の試合で同時にこれを行う方法がわからないことです。試合ごとにスレッドを使用するのは、何もしていないよりもアイドル状態になっているため、ばかげているように感じます。
私の 1 つのアイデアは、すべての試合を 5 秒間隔で更新するスレッドを 1 つだけ持つことです。これに関して私が感じる唯一の問題は、多くの試合が一度に行われると、最後に更新されたゲームがかなりの遅延を得る可能性があることです. (私のゲームは時間ベースなので、これがどれほど重要かはわかりませんが、原始的なようです)。
私の他のオプションは、有望と思われる ScheduledExecutorService (スレッドプール) を使用することでした。
ソケット接続用のスレッド プールも実行しているため、ScheduledExecutorService スレッド プールで問題が発生することはありますか?
2.私が達成しようとしていることを達成するためのより良い方法はありますか?
明確にするために、基本的に試合ごとに5秒ごとに関数を呼び出す方法を探しています。例えば:
私のゲームは 0 秒から始まり、あなたのゲームは 2 秒から始まります。サーバーは update 関数を呼び出します。
私の場合: 0、5、10、15、20、25 など...
あなたのために: 2,7,12,17,22,27,etc...