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

Sách trắng lag game › Thiết kế đồng bộ

Server từ chối sau khi đã hiển thị trước Client-side feedback rejected by server

ID nguyên nhân sy-optimistic-reject · Phụ trách chính Phát triển client (Đội phát triển game) · Phối hợp Phát triển server (Đội phát triển game)

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

Nếu server không công nhận đòn đánh hay skill đã được hiển thị trước trên màn hình của bạn, kết quả bạn thấy rõ ràng lại bị coi như chưa từng xảy ra.

Vì sao Phát trước hiệu ứng đòn đánh, động tác skill khi server chưa xác nhận (hiển thị trước) → Dẫn đến Server tính lại tầm đánh, vị trí mục tiêu, hồi chiêu, tài nguyên rồi từ chối → Trên màn hình Hiệu ứng máu đã bắn ra mà không có sát thương, chỉ có động tác skill mà không có tác dụng, chỉ có hồi chiêu chạy

Triệu chứng
Nuốt thao tác·rollback, Kéo ngược
Yếu tố
Độ trễ
Ai gặp phải
Chỉ mình tôi, Chỉ một tính năng
Khi nào
Khi làm một thao tác nhất định
Phụ trách
Phụ trách chính Phát triển client (Đội phát triển game) · Phối hợp Phát triển server (Đội phát triển game)
Việc cần làm (Đội phát triển game)
Client: chỉ những phần cần xác nhận như số sát thương, cái chết, phần thưởng mới hiển thị theo kết quả server, kiểm tra trước các lý do từ chối thường gặp, khi bị từ chối thì hoàn lại hồi chiêu và tài nguyên rồi hiển thị lý do. Server: chừa khoảng dư bằng ping khi kiểm tra tầm đánh và vị trí mục tiêu, gửi kèm lý do trong phản hồi từ chối, thu thập tỷ lệ từ chối theo skill thành chỉ số.
Con số tham khảo
Phản hồi từ chối tới muộn sau khi bấm một khoảng bằng ping + thời gian chờ tick. Ping 150 ms thì trong khoảng 0,2 giây bạn cứ tưởng “đã đánh trúng”.
Trên đồ thị
Chỉ một phần cao · Tỷ lệ server từ chối theo skill (theo khoảng ping)
Chỗ cần xem
Trên server, thu thập tỷ lệ từ chối và lý do từ chối (tầm đánh, vị trí mục tiêu, hồi chiêu, tài nguyên) theo từng skill, chia theo khoảng RTT của người chơi. Ở client, ghi lại số lần hành động đã hiển thị trước bị từ chối
Đúng nếu
từ chối dồn vào một skill cụ thể và vào lý do tầm đánh, vị trí mục tiêu, và ping càng cao thì tỷ lệ từ chối càng tăng
Loại trừ nếu
lý do từ chối là hồi chiêu, tài nguyên và không liên quan đến ping → xem giá trị dữ liệu (hồi chiêu, chi phí) ở client và server có khác nhau không. Không bị từ chối mà hiển thị chỉ bắt đầu sau khi server phản hồi → chỉ hiển thị sau khi server phản hồi (mô hình yêu cầu-phản hồi)
Cách kiểm tra
Cần log và chỉ số của server, client game
Tìm hiểu thêm
Hiển thị trước là cách tốt nhất để che ping. Tuy nhiên, thông tin client và server dùng để phán đoán (vị trí đối thủ, tài nguyên còn lại) càng khác nhau thì càng hay bị từ chối. Thu thập tỷ lệ từ chối theo skill thành chỉ số sẽ giúp dễ tìm ra chỗ phán định bị lệch.

Nguồn

  1. Using Gameplay Abilities in Unreal Engine Epic Games
    Ability Local Predicted thực thi ngay ở client nhưng server quyết định cuối cùng và có thể lật ngược kết quả
  2. Latency Compensating Methods in Client/Server In-game Protocol Design and Optimization (Yahn W. Bernier, GDC 2001) Valve
    Dự đoán việc bắn vũ khí ở client để phát hiệu ứng trước, rồi sửa sai lệch dự đoán theo kết quả server

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

Cùng tầng: Thiết kế đồng bộ

Nguyên nhân ở tầng khác gây cùng triệu chứng (Nuốt thao tác·rollback)

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