한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

ゲームラグ白書 › L1 クライアントのゲームプロセス

時刻同期の誤差 Clock sync error

原因ID cg-clock · 主担当 ゲーム開発チーム・クライアント開発

図と実験のあるメインページでこのカードを開く →

クライアントが推定したサーバー時刻がずれていると、補間のタイミングやクールタイムの判定がずれます。

なぜ 接続時に一度だけサーバー時刻を合わせ、Pingが変わってもそのまま → すると 補間するタイミング・クールタイムが終わる時刻がサーバーとずれる → 画面では 相手がときどき一瞬止まる。クールタイムが終わったのにスキルが拒否される

症状
カクつき, 不発・ロールバック
要因
遅延
誰に起きるか
自分だけ
いつ
長時間稼働するほど, ときどきランダムに
担当
主担当 ゲーム開発チーム・クライアント開発
ゲーム開発チームの対応
定期的な時刻同期(往復時間を測って補正)、急に変えず徐々に合わせる、経過時間はPCの時刻の代わりにモノトニッククロック(monotonic clock)で計測。
グラフでは
徐々に上昇 · 推定サーバー時刻の誤差
確認箇所
クライアントが推定したサーバー時刻と、サーバーがパケットに入れて送ったサーバー時刻(ティック番号)の差を定期的に記録
該当する場合
誤差が接続後の時間経過とともに大きくなるか、PCの時計が合わせられた瞬間に一気に跳ね、その頃にスキルの拒否や一瞬止まるという報告が増える
該当しない場合
誤差が小さいままなのにスキルが拒否されるなら、サーバーの判定・遅延側
確認手段
ゲームサーバー・クライアントのログ・メトリクスが必要
もっと詳しく
経過時間をPCの日付・時刻(wall clock)で測ると、Windowsがインターネット時刻に合わせて時計を修正したり、ユーザーが時計を変更したりした瞬間に、ゲームの時刻が跳ねます。経過時間は巻き戻らないモノトニッククロック(monotonic clock、Stopwatchなど)で測る必要があります。

出典

  1. RFC 5905: Network Time Protocol Version 4: Protocol and Algorithms Specification IETF
    リクエスト・レスポンスの4つの時刻から、往復遅延と時計のずれを計算する方式
  2. Acquiring high-resolution time stamps Microsoft
    QueryPerformanceCounter(Stopwatchが使用)は外部の時刻と同期しない経過時間用の時計。UTC時刻が必要なときだけシステム時刻を使う
  3. Time synchronization (Netcode for Entities 6.5) Unity
    往復時間からサーバー時刻を推定し、時刻を大きく変えずに進行速度を少しずつ調整して合わせる

あわせて読みたい原因

同じ層:L1 クライアントのゲームプロセス

同じ症状(カクつき)を起こすほかの層の原因

図と実験のあるメインページでこのカードを見る