2012-01-21 4 views
3

現在、私は最大32人のプレイヤーが同時に接続できるXNAゲーム用の専用サーバーをC#で設計する予定です。私はSystem.Netとのネットワーキングでの経験がありましたが、これまでにかなりのプレーヤー数を処理する必要はありませんでした。Asyncronous TCPネットワーキングは、C#で最大32人のプレイヤーが同時にプレイする専用サーバーのためのより良いオプションですか?

私は、スレッドの作成と破棄(特に各プレイヤーごとに1つ)は良い考えではないことを知っています。また、「待機中」のためにThreadPoolを使用するかどうかはわかりませんスレッドは利用可能である "という性質を有する。したがって、大規模なクライアント数を処理するためにAsyncを使用することを決定しました。

しかし、私はまだ、これは賢明な選択である、または私は私の厳しいニーズに合うように何か他のものを使用してするかどうかわかりませんよ。

謝罪この質問は暗い聞こえるが、私はかなり困惑している場合 - 感謝を助けて!

+3

あなたには十分な情報はありませんでした。リアルタイムゲームであるか、それともターンベースのゲームであるかなどは教えてくれませんでした。 – jason

+0

ゲームはリアルタイムの2dシューティングゲームで、破壊的な "タイル"ベースの世界になります。だから、私は時々サーバーの負荷がかなり掛かってくることを期待しています。クライアントが接続/マップの変更を行ったときに全世界のデータを送信することのみを計画しており、ゲームプレイを通じて世界中に変更を送信する予定です。 – seandewar5

答えて

3

ゲームの制限は本当に32人の同時ユーザーと、おそらくオブザーバーの一握りである場合、スレッドは、あなたがコールバックよりでコーディングが容易にそれらを見つける場合は特に、大丈夫です。 (coordinate access to shared data structuresを適切に使用する必要があり、その複雑さは対応するevent-basedデザインを上回る可能性があります)。

私はたぶん、わずか32人の同時ユーザーのためにスレッドプールを気にしません。

スループットのためのスレッドの制限は約100スレッド(もちろん、実装の詳細に依存する)を示しています。例えば、100人の同時ユーザー(これはかなり軽くロードされたIRCサーバー)を目指すことが決してないならば、あなたとあなたのチームがイベントモデルに慣れていない限り、非同期イベントモデルは必要ありません。

+0

その回答は本当に私を肯定的に驚かせました。なぜなら、インターネットを通じて聞いていたのは、データを送信/受信するためにスレッドをいつくしく作成し、破壊するのかについて話していたからです。特に32のクライアントが接続されている場合サーバー用のスレッドを扱うときに考慮する必要がある余分なことはありませんか、チャットサーバーなどの他のスレッドサーバーと同じくらいシンプルなものでしょうか?ありがとう。 – seandewar5

+1

さて、ユーザーとのすべての通信に新しいスレッドを作成することはお勧めしませんが、ユーザーあたりのスレッドは問題ありません。とにかく、ユーザー接続は比較的長期間です。私はあなたが慎重にする必要がある他の何かを認識していませんが、 "標準"スレッドAPIを使用する[Joachimの推薦](http://stackoverflow.com/a/8949991/377270) 。 – sarnold

0

あなたは、あなたが計画している負荷によって決まります。最も性能の高いソリューションは、通常、非同期プロセッサのスレッドプールと見なされますが、それは容易に重大な過度の攻撃になる可能性があります。仕事をすることができる最も簡単なソリューションを選択してください。

2

サーバがI/Oバウンドの場合、非同期のアプローチが強くなります。 I/Oを待つ間に必要なリソースが少なくなります。サーバはCPUがバインドされているとき

スレッドのアプローチが強いです。複数のコアまたはCPUに容易に拡張できます。 32人のユーザーと

、私は慎重に非同期サポートは、.NETでのプライムタイムの準備ができている少なくともまでは、スレッドのために行くことをお勧めします。 .NETに含まれているスレッドセーフな構造を使用してください。すべてスレッド間通信であり、独自のコードを作成しないでください。あなた自身でコードを作成することに決めた場合、経験では、おそらくごくわずかな間違いでもランダムエラーが発生する可能性があるため、追跡が非常に難しいと感じられます。

+0

あなたの応答をありがとう、私は2つの答えを選ぶことができた場合私の質問に2つの答えは、私はまた、あなたのCPUを依存しているサーバーを見てもあなたの選択した、あなたはさらに、 (あなたが言ったように、うまくいけば正しい方向です)、私は+1で補うでしょう。 – seandewar5

関連する問題