8

私はActionScript3で書いているゲームエンジン用のC#サーバーアプリケーションに取り組んでいます。不正行為を防ぎ、公正なゲームを保証するために、信頼できるサーバーモデルを使用しています。これまでのところ、すべてがうまく機能しています:

クライアントが移動を開始すると、サーバーに通知し、ローカルでレンダリングを開始します。次に、サーバーは、クライアントXが移動を開始したことを他のすべてのユーザーに通知し、詳細を含めて、レンダリングも開始できるようにします。クライアントが移動を停止すると、サーバーに通知します。サーバーは、クライアントが移動を開始した時間に基づいて計算を実行し、クライアントはティック遅延をレンダリングして全員に応答するため、正しい値で更新できます。

重要なのは、サーバーの計算でデフォルトの20ミリ秒のティック遅延を使用する場合、クライアントがかなり長い距離を移動すると、停止したときに顕著な前方への傾きが発生することです。遅延を22msに少し増やすと、ローカルネットワークではすべてが非常にスムーズに実行されますが、他の場所では、傾きはまだあります。少し実験した後、必要な追加の遅延は、クライアントとサーバー間の遅延にほぼ関係していることに気付きました。私はそれを非常にうまく機能する式に要約しました:delay = 20 +(latency / 10)。

では、特定のクライアントとサーバーの間の遅延を取得するにはどうすればよいでしょうか(非同期ソケットを使用しています)。サーバーの実行速度が低下しないように、CPUの労力はそれほど大きくありません。また、これは本当に最良の方法ですか、それともこれを行うためのより効率的で簡単な方法がありますか?

4

5 に答える 5

5

ICMPベースのpingを使用する場合、特にパケットがWANリンクなどのネットワーク境界を越える場合、ネットワーク機器は通常のパケットよりもICMPトラフィックの優先度を低くすることがよくあります。これにより、pingがドロップされたり、トラフィックが実際に経験しているよりも長い遅延が表示されたりする可能性があり、測定ツールではなく問題の指標になります。

ネットワークでのサービス品質(QoS)の使用の増加はこれを悪化させるだけであり、その結果、pingは依然として有用なツールですが、非ICMPベースの実際のネットワーク遅延を真に反映していない可能性があることを理解する必要があります。トラフィック。

Itrinegyブログに良い投稿があります。最近のネットワークでレイテンシー(RTT)をどのように測定しますか?これについて。

于 2009-11-04T03:09:22.493 に答える
4

すでに利用可能なPingクラスを使用できます。独自の IMHO を作成するよりも優先する必要があります。

于 2009-04-25T10:56:57.557 に答える
2

サーバーからクライアントにメッセージを送信し、応答を取得するのにかかる時間を計る「ping」コマンドを用意します。CPU過負荷のシナリオを除けば、かなり信頼できるはずです。片道の所要時間を取得するには、時間を2で割ります。

于 2009-04-21T04:02:22.700 に答える