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

Sách trắng lag game › L1 Tiến trình game phía client

Sai lệch đồng bộ đồng hồ Clock sync error

ID nguyên nhân cg-clock · Phụ trách chính Phát triển client (Đội phát triển game)

Mở thẻ gốc có hình minh họa và thí nghiệm →

Nếu giờ server mà client ước tính bị sai, thời điểm nội suy và việc phán định hồi chiêu sẽ lệch.

Vì sao Chỉ đồng bộ giờ server một lần lúc kết nối, ping thay đổi cũng để nguyên → Dẫn đến Thời điểm nội suy và thời điểm hết hồi chiêu lệch với server → Trên màn hình Đối thủ thỉnh thoảng khựng lại, hết hồi chiêu rồi mà skill vẫn bị từ chối

Triệu chứng
Giật khựng, Nuốt thao tác·rollback
Yếu tố
Độ trễ
Ai gặp phải
Chỉ mình tôi
Khi nào
Càng chạy lâu càng nặng, Thỉnh thoảng bất chợt
Phụ trách
Phụ trách chính Phát triển client (Đội phát triển game)
Việc cần làm (Đội phát triển game)
Đồng bộ thời gian định kỳ (đo thời gian khứ hồi rồi hiệu chỉnh), chỉnh dần dần thay vì đổi đột ngột, đo thời gian trôi qua bằng monotonic clock thay vì giờ của PC.
Trên đồ thị
Tăng dần · Sai số của giờ server ước tính
Chỗ cần xem
Ghi định kỳ chênh lệch giữa giờ server do client ước tính và giờ server (số tick) mà server gửi kèm trong gói tin
Đúng nếu
sai số lớn dần theo thời gian sau khi kết nối, hoặc nhảy vọt một lần đúng lúc đồng hồ PC được chỉnh, và quanh lúc đó báo cáo skill bị từ chối hoặc bị khựng tăng lên
Loại trừ nếu
sai số vẫn nhỏ mà skill vẫn bị từ chối → phía phán định của server hoặc độ trễ
Cách kiểm tra
Cần log và chỉ số của server, client game
Tìm hiểu thêm
Nếu đo thời gian trôi qua bằng ngày giờ của PC (wall clock), thì đúng lúc Windows chỉnh đồng hồ theo giờ Internet hoặc người dùng đổi giờ, thời gian trong game sẽ nhảy. Thời gian trôi qua phải đo bằng đồng hồ không bao giờ chạy lùi (monotonic clock, ví dụ Stopwatch).

Nguồn

  1. RFC 5905: Network Time Protocol Version 4: Protocol and Algorithms Specification IETF
    Cách tính độ trễ khứ hồi và sai lệch đồng hồ từ bốn mốc thời gian của yêu cầu và phản hồi
  2. Acquiring high-resolution time stamps Microsoft
    QueryPerformanceCounter (Stopwatch dùng cái này) là đồng hồ đo thời gian trôi qua, không đồng bộ với giờ bên ngoài; chỉ dùng giờ hệ thống khi cần giờ UTC
  3. Time synchronization (Netcode for Entities 6.5) Unity
    Ước tính giờ server từ thời gian khứ hồi, rồi chỉnh dần tốc độ chạy của đồng hồ cho khớp thay vì đổi giờ đột ngột

Nguyên nhân nên xem cùng

Cùng tầng: L1 Tiến trình game phía client

Nguyên nhân ở tầng khác gây cùng triệu chứng (Giật khựng)

Xem thẻ gốc có hình minh họa và thí nghiệm