ゲームラグ白書 › 一部のユーザーだけに起きる問題
受信即時処理のサーバーで起きる早送り Event-driven processing of bursty inputs
原因ID pt-event-server · 主担当 ゲーム開発チーム・サーバー開発 · 副担当 ゲーム開発チーム・クライアント開発
図と実験のあるメインページでこのカードを開く →
パケットが届くたびにすぐ処理して通知するサーバーでは、回線が重い人のまとまって届いた行動が立て続けに即実行されます。
なぜ 回線が重い人のスキル・移動のリクエストがまとまって届く → すると サーバーが受け取った瞬間に順番に実行し、すぐに全員へ通知 → 画面では ほかの人の目には、その人がスキルを一瞬で何個も使ったり、早送りのように動いたりする
- 症状
- 早送り
- 要因
- ジッター
- 誰に起きるか
- 特定のキャラだけおかしく見える
- いつ
- 特定の操作をしたとき, 常に
- 担当
- 主担当 ゲーム開発チーム・サーバー開発 · 副担当 ゲーム開発チーム・クライアント開発
- ゲーム開発チームの対応
- サーバー:行動に付いた入力時刻の間隔どおりに実行(時刻は許容範囲内の場合だけ採用)、またはまとまって届いた行動を拒否せず、最小間隔(共通クールタイム)ずつ空けて順に実行、到着時刻だけを見てクールタイムをチェックしない(正常な入力が不発になる)。クライアント:行動に入力時刻を付けて送る。
- グラフでは
- 一部だけ高い · プレイヤーごとの行動の実行間隔
- 確認箇所
- サーバーログに、プレイヤーごとの行動の到着時刻、実行時刻、クライアントが付けた入力時刻(あれば)を記録し、実行間隔と入力間隔を比較。サーバー側のパケットキャプチャで、そのユーザーのパケットの到着間隔も合わせて確認
- 該当する場合
- 入力間隔は正常なのに、サーバーでの到着・実行間隔が数msに固まっており、固まった瞬間がほかの人たちからの早送りの報告時刻と重なる
- 該当しない場合
- 入力時刻の間隔から固まっているなら、クライアントかマクロ側。サーバーの実行間隔は均等なのにほかの人の画面でだけ固まって見えるなら、見ている人の回線
- 確認手段
- ゲームサーバー・クライアントのログ・メトリクスが必要
出典
- Understanding Networked Movement in the Character Movement Component for Unreal Engine Epic Games
サーバーはServerMoveを受け取るたびに移動を計算し、直前の移動とのタイムスタンプの差で時間間隔を決める。サーバー時刻との差が大きすぎれば、その移動を破棄 - Deterministic Lockstep Gaffer On Games
届いた順に入力を適用すると、60Hzで送っても間隔が均等でないため結果がばらつく
あわせて読みたい原因
同じ層:一部のユーザーだけに起きる問題
同じ症状(早送り)を起こすほかの層の原因
図と実験のあるメインページでこのカードを見る