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

遊戲 Lag 白皮書 › L1 用戶端遊戲程式

遊戲安全模組(反作弊)檢查 Anti-cheat scan and heartbeat

原因 ID cg-anticheat · 主要負責 遊戲開發團隊(用戶端開發) · 協同 遊戲開發團隊(伺服器開發)

在含圖解與實驗的完整版中開啟卡片 →

為了防範外掛而與遊戲一起執行的安全模組會定期檢查。檢查太重,或與安全伺服器往來的心跳封包(定期確認連線存活的訊號)延遲時,就會卡頓或斷線。

為什麼 安全模組定期檢查遊戲記憶體、執行中的程式與驅動程式 → 於是 檢查期間遊戲執行緒停住,或心跳封包沒能準時送出 → 畫面上 以固定間隔頓一下,嚴重時跳出安全錯誤訊息並斷線

症狀
卡頓, 定格, 斷線
因素
停滯
誰會遇到
只有我
何時
固定週期, 剛登入/維護剛結束, 偶爾隨機發生
負責單位
主要負責 遊戲開發團隊(用戶端開發) · 協同 遊戲開發團隊(伺服器開發)
遊戲開發團隊要做的事
用戶端:把重量級檢查移到遊戲執行緒之外分批執行、比較各安全模組版本的卡頓與閃退統計(剛更新後集中發生時轉交安全模組廠商)。伺服器:容許心跳封包延遲一兩次。
數值參考
輕量的檢查通常不到 1ms,但在遊戲執行緒上執行的重量級檢查,依實作不同,有時一次會占用數十~數百 ms。
圖表上
固定週期飆高 · 畫格時間、反作弊踢出次數
查看位置
從 PresentMon 畫格時間量出飆高的間隔,並把伺服器收到的反作弊踢出原因(EOS 為 ClientActionReason 的 AuthenticationFailed / Authentication Timed Out 等)依安全模組版本與配備彙總
符合的跡象
與遊戲狀況無關、以固定間隔反覆短暫停住;安全模組剛更新後,特定配備的卡頓與驗證逾時踢出增加
不符合的跡象
與安全模組版本無關、所有配備都以相同間隔發生時,是「用戶端垃圾回收」或「背景處理程序占用 CPU」
確認方式
需要遊戲伺服器/用戶端的 log 與指標
深入了解
安全模組以驅動程式的形式深入 OS,有時會與防毒軟體、overlay、其他遊戲的安全模組衝突。安全模組剛更新後、只有特定配備集中出現卡頓或閃退回報時,要先懷疑這個原因。

出處

  1. Using the Anti-Cheat Interfaces Epic Games
    伺服器在規定時間(RegisterTimeout)內沒收到用戶端的反作弊訊息時,以驗證逾時將其踢出(常見原因是用戶端因載入而停住);若問題出在最近的模組更新,就退回先前的模組
  2. PresentMon Capture Application (README-CaptureApplication.md) Intel
    以 FrameTime(畫格之間的 CPU 時間)錄下每個畫格的時間

相關原因

同一層:L1 用戶端遊戲程式

同一症狀(卡頓)在其他層的原因

查看含圖解與實驗的完整版卡片