私はActionScript3で書いているゲームエンジン用のC#サーバーアプリケーションに取り組んでいます。不正行為を防ぎ、公正なゲームを保証するために、信頼できるサーバーモデルを使用しています。これまでのところ、すべてがうまく機能しています:
クライアントが移動を開始すると、サーバーに通知し、ローカルでレンダリングを開始します。次に、サーバーは、クライアントXが移動を開始したことを他のすべてのユーザーに通知し、詳細を含めて、レンダリングも開始できるようにします。クライアントが移動を停止すると、サーバーに通知します。サーバーは、クライアントが移動を開始した時間に基づいて計算を実行し、クライアントはティック遅延をレンダリングして全員に応答するため、正しい値で更新できます。
重要なのは、サーバーの計算でデフォルトの20ミリ秒のティック遅延を使用する場合、クライアントがかなり長い距離を移動すると、停止したときに顕著な前方への傾きが発生することです。遅延を22msに少し増やすと、ローカルネットワークではすべてが非常にスムーズに実行されますが、他の場所では、傾きはまだあります。少し実験した後、必要な追加の遅延は、クライアントとサーバー間の遅延にほぼ関係していることに気付きました。私はそれを非常にうまく機能する式に要約しました:delay = 20 +(latency / 10)。
では、特定のクライアントとサーバーの間の遅延を取得するにはどうすればよいでしょうか(非同期ソケットを使用しています)。サーバーの実行速度が低下しないように、CPUの労力はそれほど大きくありません。また、これは本当に最良の方法ですか、それともこれを行うためのより効率的で簡単な方法がありますか?