Was ist ein Herzschlag?
Wie der Name schon sagt, ist der Herzschlag ein Kriterium zur Beurteilung, ob eine Sache lebt oder tot ist. In Swoole wird der Herzschlag verwendet, um zu beurteilen, ob eine Verbindung normal oder getrennt ist.
Beginnen Sie mit dem TCP-Protokoll Es gibt drei Handshakes für eine Verbindung und vier Handshakes für das Trennen einer Verbindung. Unabhängig davon, ob es der Server oder der Client ist, der das Schließen der Verbindung initiiert, wird der Prozess von vier Wellen abgeschlossen. Auf diese Weise ist alles perfekt. Das System recycelt diesen fd und die Anwendungsschicht kann auch verwandte Angelegenheiten verarbeiten onClose Rückruf.
Was ist fd?Der wissenschaftliche Name von fd ist Dateideskriptor. In der Unix-Philosophie, dass alles eine Datei ist, ist dieser fd die Kennung, die von der Systemschicht der Geschäftsschicht zur Darstellung einer Fünf-Tupel-Netzwerkverbindung bereitgestellt wird . Sie können es einfach als Index verstehen, indem die Systemschicht die entsprechende Verbindung findet und eine Reihe von Vorgängen ausführt, z. B. das Senden von Daten an den Netzwerkschüler, das Schließen der Verbindung usw.
Warum schlägt das Herz?Wie gerade erwähnt, können wir, wenn wir eine Verbindung schließen möchten, einen Vorgang zum Schließen der Verbindung auf fd auf der Geschäftsebene initiieren: $server->close($fd);
Warum recycelt das System dann fd? Weil die fd-Ressourcen begrenzt sind und daher wiederverwendet werden müssen.
Aber in einigen Fällen, wie zum Beispiel beim plötzlichen Abziehen des Netzwerkkabels oder beim Herauskramen des optischen Kabels während der Lanxiang-Übungen, kann der Server die Anomalie der Verbindung nicht erkennen, aber tatsächlich ist die Verbindung fehlgeschlagen Recycling-Mechanismus: Diese Art von Verbindung verbraucht alle fd, was dazu führt, dass das System keine neuen Verbindungsanforderungen mehr akzeptiert. Daher gibt es einen Heartbeat-Mechanismus.
Was ist der Herzschlagmechanismus?Der Heartbeat-Mechanismus ist eine von der Business-Schicht bereitgestellte Methode, um festzustellen, ob eine Verbindung aktiv ist, sodass das System feststellen kann, ob eine Verbindung fehlgeschlagen ist. Im Allgemeinen gibt es zwei Implementierungsmethoden: 1:
Der Client sendet regelmäßig ein Heartbeat-Paket, um dem Server mitzuteilen, dass ich noch am Leben bin. Der Server überprüft regelmäßig die Liste aller Clients, um festzustellen, ob die Uhrzeit erreicht ist Wenn das letzte Heartbeat-Paket zu lang ist, wird davon ausgegangen, dass kein Heartbeat vorhanden ist, es wird als tote Verbindung gewertet und die Verbindung wird aktiv geschlossen.2: Der Server fragt regelmäßig alle Clients: Sind Sie noch am Leben? Wenn Sie noch am Leben sind, geben Sie mir ein Feedback. Kunden, die kein Feedback erhalten, werden gnadenlos getötet.
Das obige ist der detaillierte Inhalt vonWie stellt Swoole fest, ob fd verbunden ist?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!