TsgcWebSocketClient | Verbroken verbindingen

Zodra de verbinding tot stand is gebracht, als geen peer gegevens verzendt, worden er geen pakketten over het netwerk verzonden. TCP is een inactief protocol, dus het gaat ervan uit dat de verbinding nog steeds actief is.

Redenen voor verbinding verbreken

 

Half-open verbrekingen detecteren

U kunt proberen verbroken verbindingen te detecteren met de volgende methoden

Tweede verbinding

U kunt proberen een tweede verbinding te openen en verbinding te maken, maar dit heeft enkele nadelen: u verbruikt meer resources, maakt nieuwe threads aan, enz. Als de andere peer ook opnieuw is opgestart, werkt de tweede verbinding wel maar de eerste niet.

Ping andere peer

Als u een ping of een ander bericht probeert te verzenden via een half-open verbinding, zult u zien dat u geen foutmelding krijgt.

 

KeepAlive inschakelen op TCP-socketniveau

Een TCP keep-alive-pakket is gewoon een ACK waarbij het volgnummer is ingesteld op één minder dan het huidige volgnummer voor de verbinding. Een host die een dergelijke ACK ontvangt, antwoordt met een ACK voor het huidige volgnummer. Keep-alives kunnen worden gebruikt om te verifiëren dat de computer aan het andere einde van een verbinding nog beschikbaar is. TCP keep-alives kunnen eens per TCPKeepAlive.Time worden verzonden (standaard 7.200.000 milliseconden of twee uur) als er geen andere gegevens of keep-alives op een hoger niveau over de TCP-verbinding zijn verzonden. Als er geen antwoord is op een keep-alive, wordt het herhaald met een interval van TCPKeepAlive.Interval seconden. KeepAliveInterval is standaard 1000 milliseconden.

 

U kunt per-verbinding KeepAlive inschakelen en het TCP-protocol toestaan te controleren of de verbinding actief is of niet. Dit is de aanbevolen methode als u verbroken verbindingen wilt detecteren (bijvoorbeeld: wanneer u een netwerkkabel loskoppelt).

 


oClient := TsgcWebSocketClient.Create(nil);
oClient.TCPKeepAlive.Enabled := True;
oClient.TCPKeepAlive.Time := 5000;
oClient.TCPKeepAlive.Interval := 1000;