|
|
Released on: 22 Mar 2009, 13:02
from:vim
Article type: Articol
Viewed: 391
|
"Loss" reprezinta numarul de pachete pierdute intre server si client. Acest lucru se datoreaza de regula, conexiunii mai proaste decat cea a serverului si astfel clientul nostru nu poate face fata numarului mare de pachete care ii sunt trimise de catre server.
"Choke" apare în momentul în care serverul, verificand setarile voastre de rate, determina ca nu va poate trimite un update inca, deoarece acest lucru v-ar supraincarca conexiunea. Server-ul va verifica din nou, la fiecare frame pana cand clientul este gata sa primeasca update-ul, doar daca ati asteptat cel putin 1 / cl_updaterate secunde de la ultimul update.
Cunoscand aceste scurte definitii ale celor 2 termeni, putem sa cautam solutii si sa luam masuri ptr micsorarea si chiar eradicarea problemelor legate de loss si choke.
Astfel, stiind ca volumul oricarei "discutii" dintre server si client sau client si server, se ghideaza dupa ratele setate, ne putem modifica ratele pe partea de client, ptr a putea mentine o ordine si ca numarul de pachete primite/trimise sa nu fie mai mare decat poate sa duca conexiunea noastra.
Cum ne putem da seama daca aparitia loss-ului si/sau choke se datoreaza ratelor setate in jocul nostru si este problema de la server ?
Ne folosim de comanda net_graph 3 pentru a vedea detaliile transferului de date intre clientul nostru si server.
Attachment: net_graph3.jpg
1. fps reprezinta numarul de frame-uri pe secunda care sunt redate de catre client. Aceasta valoare este limitate de comanda fps_max sau refresh rate-ul la monitoarele care au Vertical-Sync activat.
2. ping reprezinta:
- Valoarea ping-ului prezentata in netgraph nu include intarzierile cauzate de tickrate sau a updaterate-ului.
- Valoarea ping-ului prezentata in scoreboard (la apasarea TAB) include intarzierile cauzate de tickrate si a updaterate-ului.
IN reprezinta valoarea tuturor informatiilor primite de catre clientul nostru, de la server. OUT reprezinta valoarea tuturor informatiilor trimise de catre clientul nostru, catre server.
Astfel, daca valoarea IN este mai mare decat valoarea OUT cu mai mult de 30%, apare loss-ul (vezi definitia de la inceputul acestui articol).
Valoarea IN este controlata de:
- cl_updaterate (pentru client)
- sv_maxupdaterate (pentru server)
Valoarea OUT este controlata de:
- cl_cmdrate (pentru client)
Valorile IN si OUT reprezentate in graficul de mai sus, au 3 valori. De la stanga spre dreapta:
3. Valoarea pachetului in bytes, care este trimis (OUT) si primit (IN). 4. Valoarea medie in kilobytes/sec , a informatiilor de joc + segmentul UDP + pachetul ip. ( Daca inmultesti valoarea de la punctul 3 (din graficul de mai sus) cu 5 si imparti cu 1000, veti obtine o valoare apropiata ca aceasta, de la punctul 2. ) 5. Valoarea medie a update-urilor pe secunda, care sunt trimise si primite. ( Valorile 4 si 5 din grafic sunt doar medii, nu sunt foarte precise si de multe ori acestea indica valori imposibile. )
Cum putem reduce choke ?
Elementul cheie pentru optimizarea transferului de date intre client si server, astfel incat sa reducem choke-ul, este de seta ratele in functie de ratele server-ului, la care adaugam o unitate.
Pentru a determina valoare tickrate-ului pentru server-ul la care sunteti conectat, scrieti sv_maxupdaterate in consola.
Astfel, pe un server cu un tickrate setat la 100, valorile setate de noi, in consola vor fi:
Code: cl_updaterate 101 cl_cmdrate 101 fps_max 101 rate 30000 (pentru a determina valoarea setata pe server, dupa ce va conectati la server, scrieti in consola sv_maxrate)
Notă: Sursa acestui articol este EvoSys.ro
|
|