WebSocket Ping vs. TCP Keepalive printr-un proxy
Alegeți o verificare de vitalitate pentru partenerul WebSocket în loc să tratați un socket TCP viu drept dovadă că calea aplicației răspunde.
Un socket TCP viu, un partener WebSocket receptiv și progresul util al aplicației sunt observații diferite:
| Dovadă | Ce stabilește |
|---|---|
| Vitalitate la nivel TCP | Calea de transport verificată răspunde la acel nivel |
| Un WebSocket Pong corespunzător | Partenerul a răspuns acel cadru de control |
| O confirmare a aplicației | Aplicația a confirmat o operațiune conform propriului protocol |
Un proxy de redirecționare menține de obicei conexiuni separate pentru client și destinație. Partenerul TCP al clientului este proxy-ul, în timp ce un Ping într-un tunel stabilit călătorește către punctul final WebSocket.
Un Pong corespunzător
Protocolul cere ca un Pong care răspunde să transporte datele de aplicație ale Ping-ului. Folosiți acea corespondență pentru a identifica o sondă în așteptare. Un Pong nesolicitat este permis, dar nu cere confirmare; trimiterea lui după fiecare mesaj de date oferă o dovadă diferită.
Preferăm mecanismul de heartbeat suportat de bibliotecă. JavaScript din browser are nevoie în schimb de uncontract de heartbeat al aplicației. Alegeți intervale și praguri de eșec pentru încărcare și politica de rețea. Pauzele de planificare sau o buclă de evenimente supraîncărcată pot rata un prag agresiv fără a stabili că rețeaua a eșuat.
Mențineți receptorul în funcțiune
Clientul are nevoie de I/O continuu pentru a primi și procesa cadre de control. Blocarea acelui mecanism poate face ca lipsa locală de resurse să pară o întrerupere.
Ping creează trafic în tunel, dar fiecare intermediar decide ce satisface politica sa de inactivitate. Niciun heartbeat nu garantează protecție față de o limită absolută a duratei de viață a conexiunii.
Un partener poate răspunde la Ping în timp ce aplicația sa încetează să producă actualizări, iar un abonament silențios poate fi sănătos. Urmăriți separat ultimul Pong valid și evenimentul semnificativ al aplicației când ambele contează. La eșec, păstrați ruta, timpii scursi și sonda în așteptare, apoi închideți sau recuperați prin ciclul de viață suportat.