Wenn der Client die Verbindung trennt, sendet er unter normalen Umständen ein Fin-Paket an den Server. Nach dem Empfang des Fin-Pakets erfährt der Server, dass die Client-Verbindung getrennt ist, und löst sofort das aus onClose-Ereignisrückruf.
Es gibt jedoch einige Extremsituationen wie Stromausfall des Clients, Herunterfahren des Netzwerks, Herausziehen des Netzwerkkabels, Routing-Fehler usw. In diesen Extremsituationen kann der Client das Fin-Paket nicht an den Server senden, und der Server Ich kann nicht wissen, dass die Verbindung getrennt wurde. Bei einer regelmäßigen Heartbeat-Datenübertragung zwischen Client und Server wird die Trennung der Verbindung relativ zeitnah erkannt und der onClose-Ereignisrückruf ausgelöst.
Darüber hinaus schließt die Routing-Knoten-Firewall Socket-Verbindungen, die längere Zeit nicht kommuniziert haben, was dazu führt, dass lange Socket-Verbindungen getrennt werden. Daher müssen Client und Server regelmäßig Heartbeat-Daten senden, um zu verhindern, dass die Verbindung getrennt wird.
Wie konfiguriere ich die Heartbeat-Erkennung in GatewayWorker?
Derzeit unterstützt GatewayWorker zwei Arten der Heartbeat-Erkennung. Der Server legt die Anzahl der Sekunden fest, nach denen die Verbindung geschlossen wird, wenn kein Heartbeat empfangen wird (empfohlen wird auch, dass der Server regelmäßig Heartbeat-Daten an den Client sendet). nicht empfohlen).
Der Client sendet regelmäßig Heartbeats (empfohlen)
Der Client sendet regelmäßig Heartbeats an den Server (das Intervall beträgt vorzugsweise weniger als 60 Sekunden). Die Serverkonfiguration ähnelt der folgenden:
$gateway = new Gateway("Websocket://0.0.0.0:8585"); $gateway->pingInterval = 55; $gateway->pingNotResponseLimit = 1; $gateway->pingData = '';
Die Bedeutung der obigen Konfiguration besteht darin, dass, wenn innerhalb von 55 Sekunden nach der Clientverbindung pingInterval*pingNotResponseLimit=55 Sekunden keine Anfrage erfolgt, der Server denkt, dass der entsprechende Client wurde getrennt, und der Server schließt die Verbindung und löst den onClose-Rückruf aus.
Für mehr Workerman-Wissen beachten Sie bitte die Rubrik Workerman-Tutorial.
Das obige ist der detaillierte Inhalt vonWie Arbeiter in Verbindung bleiben. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!