WebSocket-hjärtslag i webbläsaren kräver ett applikationsprotokoll
Designa ett överenskommet applikationshjärtslag när webbläsarens JavaScript inte kan skicka WebSocket Ping-ramar direkt.
Webbläsarens WebSocket-API har send(). Det erbjuder ingen allmän ping()-metod som JavaScript kan använda för att skicka protokollets Ping-ramar.
Om din applikation skickar ett textmeddelande som {"type":"heartbeat"} är det applikationsdata. Servern måste förstå meddelandet och definiera ett svar. En server som inte implementerar det kontraktet är inte skyldig att svara med en protokoll-Pong bara för att texten innehåller ordet ping.
Definiera vad en bekräftelse betyder, hur den identifierar hjärtslaget som väntar och när en gammal bekräftelse är för sen. Håll det åtskilt från bekräftelse av en affärsoperation.
En JavaScript-timer har också schemaläggningsbegränsningar. Bakgrundsflikar och upptagna huvudtrådar kan fördröja återanrop. Tolka inte en missad exakt timergräns som avgörande bevis för att proxyn slutade vidarebefordra.
Webbläsaren kan hantera protokollets styrramar internt, men det ger inte applikationskoden en portabel bild av varje Ping eller Pong. Om sidan behöver sitt eget livskraftighetsbeslut, använd ett uttryckligt applikationskontrakt och en återställningspolicy.
En socket vars readyState är OPEN anses lokalt vara öppen; det är inte en oberoende mätning av att fjärrapplikationen bearbetade ditt senaste meddelande. Använd de bevis som passar den fråga du faktiskt behöver besvara.