1

私はマルチプレイヤーゲームを開発しており、サーバーに書かれていますasp.net。ゲーム ユーザーはサーバーにリクエストを送信して、対戦相手を見つけ、何らかの戦闘に参加します。バトル リクエストにはいくつかのパラメーターを指定できますが、パラメーターを指定しないこともできます (これが最も一般的なシナリオであると推定されています)。そのため、送信者は、既にリクエストを送信したユーザーに接続し、接続を待機する必要があります。

すべての待機中のリクエストをスレッドセーフなコレクションに保存するのは良い考えですか? これには常にかなりの数の要素が含まれます (戦闘の一致が非常に迅速に検出されるため) が、多くのスレッドが一度にこのコレクションにアクセスしようとします。Nまた、リクエストごとに異なるコレクションを作成するのは良い考えですか? の最適なサイズはN? それとも他のアイデアですか?私の主な問題は、現在の接続数が非常に多い場合でも、サーバーのパフォーマンスを損なうことなく、一致をすばやく見つけることです。

UPD

私の問題をあまり明確に説明していないようです。すべての戦闘情報 - 参加ユーザー、戦闘中のアクション、勝者などはデータベースに保存されます。必要なのは、戦闘に参加するためのリクエストを処理することです (リクエストには送信者 ID と戦闘フィルターのみが含まれている可能性があります)。通常、対戦相手はすぐに見つかるのでリクエスト データを保存する必要はありません (対戦が見つかったら削除し、すべての戦闘データはデータベースに保存されます)。同時に要求します。

4

1 に答える 1

1

プレーヤーを一致させるための基準に立ち入らずに、Web アプリケーションを作成するときにユーザー セッション データをメモリに保持しないでください。Web アプリケーションがリサイクルされると、データが失われることがあります。

SLaks が言ったように、このデータをデータベースに保存し、そこから選択する必要があります。ユーザー マッチング ロジックに応じて、このベース ラインからパフォーマンスの最適化を検討する必要があります。上位 n 人のユーザーを選択するか、必要な基準に基づいてクエリを作成します。

于 2012-11-04T22:46:19.493 に答える