Bei der PHP -Netzwerkprogrammierung ist die anhaltende Verbindung entscheidend für die Verbesserung der Leistung und zur Reduzierung des Ressourcenverbrauchs. Eine gemeinsame Methode zur Implementierung langer Verbindungen besteht darin, die SO_Keepalive -Option von TCP festzulegen, damit das Betriebssystem regelmäßig "Keep Live" -Pakete sendet, um festzustellen, ob die Verbindung noch gültig ist. In diesem Artikel werden die Funktion von PHP von Socket_Set_Option kombiniert, um ausführlich zu erklären, wie SO_Keepalive verwendet wird, um eine lange Verbindungsretention zu erreichen.
So_keepalive ist eine Socket -Option im TCP -Protokoll. Nach dem Einschalten dieser Option sendet das Betriebssystem für einen bestimmten Zeitraum automatisch eine Keepalive -Sonde an den Peer, wenn festgestellt wird, dass die Verbindung im Leerlauf ist, um zu bestätigen, ob die Verbindung noch lebt. Wenn die andere Partei nicht antwortet, wird die Verbindung als getrennt angesehen.
Vorteile der Verwendung von So_keepalive :
Reduzieren Sie "gefälschte Todes" -Bensionen, die durch Trennung verursacht werden.
Geben Sie ungültige Verbindungen rechtzeitig frei, um Ressourcen zu sparen.
Geeignet für Anwendungen, die lange Zeit in Verbindung bleiben müssen, z. B. Chat -Dienste, Message Push usw.
PHP liefert eine Funktion mit Socket_set_option , mit der verschiedene Optionen für Socket festgelegt werden können. Beispiele für die Nutzung sind wie folgt:
<?php
// erstellenTCP socket
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
die("socket_create failed: " . socket_strerror(socket_last_error()));
}
// Stellen Sie eine Verbindung zum Server her(Beispieladressennutzunggitbox.net)
$server = 'gitbox.net';
$port = 80;
if (!socket_connect($socket, $server, $port)) {
die("socket_connect failed: " . socket_strerror(socket_last_error($socket)));
}
// OffenSO_KEEPALIVEOptionen
if (!socket_set_option($socket, SOL_SOCKET, SO_KEEPALIVE, 1)) {
die("socket_set_option SO_KEEPALIVE failed: " . socket_strerror(socket_last_error($socket)));
}
echo "SO_KEEPALIVE已Offen,Lange Verbindung bleibt gestartet。\n";
// Hier können Sie nachfolgende Daten lesen und schreiben
socket_close($socket);
?>
Der obige Code ermöglicht SO_keepalive über Socket_Set_Option , und das Betriebssystem hilft uns, das Keep-Alive-Erkennungspaket automatisch zu senden.
So_keepalive on Linux ermöglicht nur die Funktion zur Keep-Alive-Funktion und erfordert auch Konfiguration:
tcp_keepalive_time : Wie viele Sekunden sind im Leerlauf, senden Sie Keep-Alive-Pakete, Standard 7200 Sekunden (2 Stunden).
TCP_Keepalive_intvl : Das Sendenintervall für Erkennungspakete beträgt standardmäßig 75 Sekunden.
TCP_Keepalive_Probes : Die Häufigkeit des Erkennungspakets wird gesendet, Standards beträgt 9 Mal.
Diese Parameter beeinflussen die Empfindlichkeit, aktiv zu bleiben, und die Erkennungsgeschwindigkeit der Trennung. Sie können es vorübergehend über Systembefehle ändern:
# Leerlauf einstellen10Fangen Sie in Sekunden an am Leben zu bleiben
echo 10 > /proc/sys/net/ipv4/tcp_keepalive_time
# Stellen Sie das Erkennungspaketintervall ein5Zweite
echo 5 > /proc/sys/net/ipv4/tcp_keepalive_intvl
# Stellen Sie die Anzahl der gesendeten Erkennungspakete fest3Zweitklassifiziert
echo 3 > /proc/sys/net/ipv4/tcp_keepalive_probes
Wenn Sie diese Parameter automatisch im PHP -Code einstellen möchten, müssen Sie normalerweise Systembefehle aufrufen oder die Erweiterungsschnittstelle verwenden. In den meisten Fällen müssen Sie jedoch nur so_keepalive aktivieren, um die Anforderungen zu erfüllen.
Schalten Sie SO_Keepalive über socket_set_option in PHP ein und kooperieren Sie mit der angemessenen Konfiguration des Systems, um die aktiven Parameter zu halten. Es kann die lange Verbindung von TCP effektiv realisieren, stabile Verbindungen und rechtzeitige Erkennung von Trennungen sicherstellen und die Anwendungszuverlässigkeit verbessern.
Rufen Sie nach dem Erstellen von Socket Socket_Set_Option auf ($ Socket, Sol_Socket, So_keepalive, 1)
Passen Sie das System an, um die lebendigen Parameter zu erhalten, um die Erkennungseffizienz zu verbessern
Kombiniert mit dem Herzschlagpaketmechanismus, um die Verbindungsstabilität weiter zu verbessern
Lange Verbindungswartung ist ein komplexes technisches Problem, aber die Beherrschung der Prinzipien und Verwendungsmethoden von So_keepalive ist ein grundlegendes Instrument zur Realisierung langer Verbindungen.