WebSocket Ping kontra TCP Keepalive gennem en proxy
Vælg et livstjek for WebSocket-modparten i stedet for at betragte en levende TCP-socket som bevis på, at applikationsvejen svarer.
En levende TCP-socket, en WebSocket-modpart der svarer, og nyttige fremskridt i applikationen er forskellige observationer:
| Bevis | Hvad det fastslår |
|---|---|
| Levetid på TCP-niveau | Den kontrollerede transportvej svarer på det niveau |
| Et matchende WebSocket Pong | Modparten besvarede den kontrolramme |
| En applikationsbekræftelse | Applikationen bekræftede en handling under sin egen protokol |
En videresendende proxy holder oftest separate forbindelser mod klienten og mod destinationen. Klientens TCP-modpart er proxien, mens en Ping inde i en etableret tunnel rejser til WebSocket-endepunktet.
Et matchende Pong
Protokollen kræver, at et svar-Pong bærer Pingens applikationsdata. Brug den sammenhæng til at identificere en igangværende test. Et uopfordret Pong er tilladt, men anmoder ikke om bekræftelse; at sende et efter hver databesked giver et andet bevis.
Foretræk bibliotekets understøttede heartbeat-mekanisme. JavaScript i browseren har i stedet brug for en applikationsheartbeat-kontrakt. Vælg intervaller og fejltærskler ud fra arbejdsbyrden og netværkspolitikken. Planlægningspauser eller en overbelastet hændelsesløkke kan misse en aggressiv tærskel uden at påvise et fejlet netværk.
Hold modtageren kørende
Klienten har brug for løbende I/O for at modtage og behandle kontrolrammer. Blokering af den mekanisme kan få lokal mangel til at ligne et nedbrud.
Ping skaber tunneltrafik, men hver mellemstation afgør selv, hvad der opfylder dens inaktivitetsregel. Intet heartbeat garanterer beskyttelse mod en absolut grænse for forbindelsens levetid.
En modpart kan svare på Ping, mens dens applikation holder op med at producere opdateringer, og et stille abonnement kan være sundt. Følg det sidste gyldige Pong og den meningsfulde applikationshændelse separat, når begge er vigtige. Ved fejl, bevar ruten, forløbne tider og den igangværende test, og luk eller genskab derefter via den understøttede livscyklus.