私はマルチプレイヤーゲームを開発しており、サーバーに書かれていますasp.net
。ゲーム ユーザーはサーバーにリクエストを送信して、対戦相手を見つけ、何らかの戦闘に参加します。バトル リクエストにはいくつかのパラメーターを指定できますが、パラメーターを指定しないこともできます (これが最も一般的なシナリオであると推定されています)。そのため、送信者は、既にリクエストを送信したユーザーに接続し、接続を待機する必要があります。
すべての待機中のリクエストをスレッドセーフなコレクションに保存するのは良い考えですか? これには常にかなりの数の要素が含まれます (戦闘の一致が非常に迅速に検出されるため) が、多くのスレッドが一度にこのコレクションにアクセスしようとします。N
また、リクエストごとに異なるコレクションを作成するのは良い考えですか? の最適なサイズはN
? それとも他のアイデアですか?私の主な問題は、現在の接続数が非常に多い場合でも、サーバーのパフォーマンスを損なうことなく、一致をすばやく見つけることです。
UPD
私の問題をあまり明確に説明していないようです。すべての戦闘情報 - 参加ユーザー、戦闘中のアクション、勝者などはデータベースに保存されます。必要なのは、戦闘に参加するためのリクエストを処理することです (リクエストには送信者 ID と戦闘フィルターのみが含まれている可能性があります)。通常、対戦相手はすぐに見つかるのでリクエスト データを保存する必要はありません (対戦が見つかったら削除し、すべての戦闘データはデータベースに保存されます)。同時に要求します。