Với client ở cửa sổ chạy nền, game, engine và OS đều giảm khung hình và việc xử lý. Gói tin nhận được không được xử lý kịp nên bị dồn lại hoặc tràn.
Vì sao Giới hạn khung hình khi chạy nền trong tùy chọn game hoặc driver đồ họa (ví dụ driver NVIDIA cho chọn từ 20 đến 200 khung hình mỗi giây), tiết kiệm điện, cấu hình tạm dừng khi chạy nền của engine. OS cũng ưu tiên cấp CPU và GPU cho cửa sổ đang ở phía trước (foreground) → Dẫn đến Số gói xử lý mỗi khung hình giảm nên hàng đợi dồn lại, bộ đệm nhận tràn thì gói bị bỏ → Trên màn hình Đưa cửa sổ lên phía trước thì mọi thứ hiện ra dồn một lượt, hoặc một số NPC mãi không hiển thị
Phụ trách chính Phát triển client (Đội phát triển game) · Phối hợp Bên ngoài (Bên ngoài)
Việc cần làm (Đội phát triển game)
Nhận dữ liệu mạng liên tục trên thread tách riêng khỏi vòng lặp game, bảo đảm thông lượng xử lý tối thiểu cả khi chạy nền, bật cấu hình chạy nền của engine (Unity là runInBackground).
Việc cần làm (Bên ngoài)
Hướng dẫn người chơi tắt giới hạn khung hình khi chạy nền của driver đồ họa và chế độ tiết kiệm điện của PC.
Con số tham khảo
Với Unity, nếu tắt runInBackground, vòng lặp game dừng ngay khi cửa sổ mất focus. Nếu chỉ nhận dữ liệu trong vòng lặp đó thì trong thời gian này không gói tin nào được xử lý.
Trên đồ thị
Đứt quãng rồi dồn về · Khoảng cách khung hình của client, số gói xử lý mỗi khung hình
Chỗ cần xem
Trên cùng một PC, đặt một cửa sổ ở trước, cửa sổ kia ở sau rồi đổi vai để so sánh. Dùng PresentMon đo khoảng cách khung hình của hai tiến trình; nếu có log phía game thì xem trạng thái focus của cửa sổ và số gói xử lý mỗi khung hình
Đúng nếu
chỉ khi ở cửa sổ chạy nền thì khoảng cách khung hình tăng mạnh (nếu do giới hạn của driver thì đi ngang ở khoảng cách tương ứng với số khung hình mỗi giây đã đặt) hoặc việc xử lý dừng lại, và khi đổi cửa sổ thì vấn đề cũng chuyển sang client kia
Loại trừ nếu
cửa sổ ở phía trước cũng bị y như vậy → không phải do giới hạn chạy nền. Luôn chỉ cùng một client bất thường, bất kể vị trí cửa sổ → xem khác tùy chọn hiển thị hoặc khác phiên bản
Cách kiểm tra
Kiểm tra ở môi trường phía người chơi
Nguồn
Application.runInBackgroundUnity Giá trị mặc định của runInBackground là false, khi đó ứng dụng tạm dừng khi chạy nền