1

プレイヤーやその他のオブジェクトが単純な座標系で画面上を移動するマルチプレイヤー 2D ゲームを開発しています。そのため、プレイヤーのクライアントはその動きをサーバーに送信し、それらの動きに従って、サーバーのゲーム ルーム スレッドが定期的に (おそらく 50 ~ 100 ミリ秒)、すべてのオブジェクトの新しい速度、座標、および角度を計算します。次に、それらの変更に関するデータをすべてのプレーヤーに送信します。

たとえば、1 秒間に 3 回動きを送信できる 10 人のプレイヤーがいる場合、サーバーはそれらの動きを全員に送信する必要があります。単なる動き以外のプレーヤーのアクションを考慮すると、1 秒間に数十個の小さなメッセージが発生する可能性があり、それは 1 つの部屋に限られます。

だからここにたくさんの質問があります:

1) Netty は私が探しているフレームワークですか? リアルタイム ゲームなので、1 ミリ秒も重要ではありません。低遅延は最も重要な要件です。プレイヤーの ping が 30 を超えると、プレイはかなり貧弱でラグが発生します。

2) もしそうなら、小さなパケットを送信するこの種のサーバーの最適化と設定に関するアドバイスをすべて聞きたいのですが、それらはたくさんあります。同時プレイヤーのピークは、100 ~ 200 の部屋で 2000 ~ 3000 人のユーザーがプレイしていると推定しているので、サーバーがその数のプレイヤーがゲームをプレイしても遅延なく処理できるようになれば、非常にうれしいです。

3) すべてのゲームルームには、ゲームをループして実行する独自のスレッドがあります。この種のスレッドを実行する適切な方法があるので、サーバーの通常の機能にはあまり影響しませんか?

回答ありがとうございます。

4

2 に答える 2

3

githubからこのnettyゲームサーバーを見てください。ここでいくつかの良いポインタとパターンを得ることができます。多分あなたはあなたの目的のためにもそれを直接使うことができます

于 2012-04-15T01:14:24.960 に答える
1

Nettyは仕事をすることができます。高スループットと低遅延に非常に適しています。だから私はあなたがそれを試してみるべきです。私はそれがあなたのために箱から出して「うまくいく」はずだと思います;)

Netty には、NIO (ノンブロッキング) および OIO (ブロッキング) の実装が付属しています。NIO を使用する場合 (これをお勧めします)、API をイベント ベースに設計し、使用するスレッドをできるだけ少なくすることをお勧めします。そうしないと、「ゲームルーム」に何千もある場合、スケーリングが難しい場合があります。

于 2012-04-13T19:12:04.813 に答える