中EN

Source Multiplayer Networking

Markdown3 KB 原始文件

Source: https://developer.valvesoftware.com/wiki/Source_Multiplayer_Networking Mirror used: https://web.archive.org/web/20200910022723/developer.valvesoftware.com/wiki/Source_Multiplayer_Networking Author: Valve Developer Community

Architecture

Client–server. Dedicated server authoritative over simulation, rules, input processing. Clients send input samples; receive world snapshots (~20–30 pps typical). Clients do not talk P2P. Issues: limited bandwidth, latency (client behind server), jitter, packet loss. Server: compression + lag compensation. Client: prediction + interpolation.

Ticks

Server simulates discrete ticks (default timestep 15ms ≈ 66.67 Hz). Each tick: process usercmds, physics, rules, update entities; maybe snapshot. Higher tickrate → precision + CPU/bandwidth. -tickrate override not recommended for many titles (CSS/DoD/TF2 fixed 66; L4D/L4D2 fixed 30).

Rates

Client rate (bytes/s) declares inbound capacity — most important client net var. cl_updaterate (default 20) requests snapshot rate; server never exceeds tickrate or client rate. Server clamps: sv_minrate/sv_maxrate, sv_minupdaterate/sv_maxupdaterate. Client builds usercmds at tickrate but sends at cl_cmdrate (often 30), packing multiple cmds per packet.

Delta compression

Server sends changes since last acked update. Full snapshots on join or heavy loss (cl_fullupdate).

Entity interpolation

Default ~20 snapshots/s. Render in the past so always interpolate between two snapshots. Default lerp 100ms (cl_interp 0.1) tolerates one lost snapshot. Formula: interpolation period = max(cl_interp, cl_interp_ratio / cl_updaterate). If history exhausted → linear extrapolate up to cl_extrapolate_amount (0.25s). Interp lag is known to server lag compensation — do not disable.

Input prediction

Client runs same movement code as server (cl_predict). On server snapshot: compare predicted vs authoritative; correct errors; optionally smooth (cl_smooth, cl_smoothtime). Only local player (and entities solely affected by them) can be predicted.

Lag compensation

History of player positions (~1s). On usercmd: Command Execution Time = Current Server Time - Packet Latency - Client View Interpolation Rewind other players only to that time; execute cmd (hit detection); restore. Client trust of "I hit" messages rejected (cheat / MITM). Paradox: can be hit "around a corner" from low-ping victim POV. Hit detection not pixel-perfect (tickrate + speed).

Net graph / tips

net_graph shows loss, choke, lerp, rates. Prefer default settings; only tune rate for bandwidth. Do not turn off interpolation or lag compensation expecting better aim. Higher tickrate (e.g. 100) ~1.5× CPU vs 66 — Valve suggests not exceeding 66 for headroom.

引用这一章的笔记

输入关键词开始搜索

滚轮或双指缩放 · 拖动平移 · 双击放大 / 还原