Bei der Kommunikation von Netzwerken können Anwendungen auf gemeinsame Netzwerkausnahmen stoßen, einschließlich:
Diese Probleme können den normalen Betrieb des Programms beeinflussen, und Entwickler müssen sich effektiv mit ihnen befassen.
PHP bietet verschiedene Methoden, um Ausnahmen in der Netzwerkkommunikation zu bewältigen. Im Folgenden werden wir untersuchen, wie diese Ausnahmen effektiv durch Flusskontrollfunktionen und Fehlersteuerungsoperatoren verwaltet werden können.
Mit der Flow Control -Funktion von PHP (z. B. stream_set_timeout () ) können wir das Timeout des Streams festlegen, um das Programmstottern aufgrund von Verbindungszeitlimiten zu vermeiden.
Hier ist ein Beispielcode, der stream_socket_client () verwendet, um eine TCP -Verbindung herzustellen, und ein Timeout über Stream_Set_Timeout () festlegt:
$stream = stream_socket_client('tcp://www.example.com:80', $errno, $errstr, 5);
if ($stream === false) {
echo 'Netzwerkausnahme:', $errstr, ' (', $errno, ')';
} else {
stream_set_timeout($stream, 5); // Stellen Sie die Auszeit auf5Zweite
fwrite($stream, "GET / HTTP/1.1\r\nHost: www.example.com\r\nConnection: close\r\n\r\n");
$response = stream_get_contents($stream);
$meta = stream_get_meta_data($stream);
if ($meta['timed_out']) {
echo 'Netzwerkausnahme:Verbindungszeitüberschreitung';
} else {
echo 'Antwortnachricht:', $response;
}
fclose($stream);
}
In diesem Beispiel erstellen wir zunächst eine TCP -Verbindung über stream_socket_client () und setzen das Zeitüberschreitungsgrenze auf 5 Sekunden. Dann senden wir eine HTTP -Anfrage und erhalten eine Antwort. Bei der Beurteilung, ob die Zeitüberschreitung erreicht ist, verwenden wir stream_get_meta_data (), um zu überprüfen, ob der Zeitüberschreitungsfehler auftritt.
Eine andere Möglichkeit, Netzwerkausnahmen zu handhaben, besteht darin, den Fehlersteuerungsoperator ( @ ) von PHP zu verwenden. Über diesen Bediener können Entwickler bestimmte Netzwerkausnahmen ignorieren und Fehlermeldungen verarbeiten.
Der folgende Code zeigt, wie Sie den @ -Operator verwenden, um mögliche Ausnahmen zu behandeln:
$stream = @stream_socket_client('tcp://www.example.com:80', $errno, $errstr, 5);
if ($stream === false) {
echo 'Netzwerkausnahme:', $errstr, ' (', $errno, ')';
} else {
fwrite($stream, "GET / HTTP/1.1\r\nHost: www.example.com\r\nConnection: close\r\n\r\n");
$response = @stream_get_contents($stream);
if (empty($response)) {
echo 'Netzwerkausnahme:', error_get_last()['message'];
} else {
echo 'Antwortnachricht:', $response;
}
fclose($stream);
}
In diesem Code wird der @ -Operator verwendet, um die möglichen Fehler zu ignorieren, die durch stream_socket_client () und stream_get_contents () verursacht werden. Wenn $ response leer ist, bedeutet dies, dass eine Ausnahme im Netzwerk aufgetreten ist und wir die Fehlermeldung über ERROR_GET_LAST () erhalten haben.
Bei der Behandlung von Netzwerkausnahmen müssen Entwickler den folgenden Punkten besondere Aufmerksamkeit schenken:
Ausnahmen der Netzwerkkommunikation sind häufige Probleme in der Entwicklung, und es ist entscheidend, die richtigen Ausnahmebehörigmethoden zu beherrschen. Durch die Verwendung von Flow -Steuerungsfunktionen und Fehlersteuerungsoperatoren können wir effektive Netzwerkausnahmen vermeiden, die Programmabstürze oder langsame Antworten verursachen. In der tatsächlichen Entwicklung müssen Entwickler die entsprechende Verarbeitungsmethode gemäß dem spezifischen Szenario auswählen und auf einige Details achten, um die Stabilität des Programms sicherzustellen.