Pour donner un example concret, le protocole client vers serveur du moteur source (cs go, team fortress 2, ...):
Le serveur a un nombre de mises a jour/seconde fixe: le tickrate (usuellement 64).
Le client envois un nombre fixe de paquets/seconde au serveur (cl_cmdrate), ce nombre peut être inférieur ou égal au tickrate. Un paquet peut contenir une ou plusieurs commandes.
Une commande a trois variables (parmis d'autres):
// forward velocity.
float forwardmove;
// sideways velocity.
float sidemove;
// upward velocity.
float upmove;
A chaque mise a jour (tick), le serveur fait (grossièrement)
FOREACH commande IN commandesRecues:
clients[commande.client].forwardmove = commande.forwardmove
clients[commande.client].sidemove = commande.sidemove
clients[commande.client].upmove = commande.upmove
...
calculeTrame();
envoisTrame();
Définition: https://github.com/ValveSoftware/source-sdk-2013/blob/0d8dceea4310fde5706b3ce1c70609d72a38efdf/sp/src/game/shared/usercmd.h
Encode/décodage: https://github.com/ValveSoftware/source-sdk-2013/blob/0d8dceea4310fde5706b3ce1c70609d72a38efdf/mp/src/game/shared/usercmd.cpp
Exécution d'une commande: https://github.com/ValveSoftware/source-sdk-2013/blob/master/mp/src/game/server/player_command.cpp#L315
Mise a jour des mouvements du client: https://github.com/ValveSoftware/source-sdk-2013/blob/master/mp/src/game/server/player_command.cpp#L133