PHP socket_set_blocking()-Funktion: Alles, was Sie wissen müssen
Als PHP-Entwickler müssen Sie möglicherweise steuern, ob ein Socket blockierend oder nicht-blockierend ist, um die Leistung und die Ressourcennutzung zu optimieren. Die Funktion socket_set_blocking() wurde früher für diesen Zweck verwendet, ist jedoch in PHP 8.1 veraltet und in PHP 8.2 entfernt worden. Die moderne Alternative ist stream_set_blocking(). In diesem Artikel erfahren Sie, wie Sie den Blockiermodus eines Sockets mit dem aktuellen Standard festlegen.
Was ist stream_set_blocking()?
stream_set_blocking() ist die moderne PHP-Funktion zum Festlegen des Blockiermodus eines Streams oder Sockets. Sie ersetzt die veraltete Funktion socket_set_blocking(). Wenn sich ein Stream im Blockiermodus befindet, werden E/A-Operationen wie socket_read() oder socket_write() die Ausführung pausieren, bis Daten verfügbar sind oder der Vorgang abgeschlossen ist. Im nicht-blockierenden Modus kehren diese Operationen sofort zurück, sodass Ihr Skript andere Aufgaben bearbeiten oder Polling implementieren kann.
So verwenden Sie stream_set_blocking()
Die Verwendung von stream_set_blocking() ist unkompliziert. Hier ist die Syntax der Funktion:
Die PHP-Syntax von stream_set_blocking()
stream_set_blocking(resource|Socket $stream, bool $mode): boolDie Funktion übernimmt zwei Parameter:
$stream: Die Socket- oder Stream-Ressource/das -Objekt, das konfiguriert werden soll. Beachten Sie, dass moderne PHPSocket-Objekte anstelle veralteter Ressourcen verwendet.$mode:truefür den Blockiermodus,falsefür den nicht-blockierenden Modus.
Hier ist ein Beispiel dafür, wie Sie stream_set_blocking() mit ordnungsgemäßer Fehlerbehandlung und Ressourcenbereinigung verwenden:
So verwenden Sie stream_set_blocking()?
<?php
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
die("Socket creation failed: " . socket_strerror(socket_last_error()));
}
// Set to non-blocking mode
if (!stream_set_blocking($socket, false)) {
die("Failed to set blocking mode");
}
// ... perform socket operations ...
socket_close($socket);In diesem Beispiel verwenden wir socket_create(), um einen neuen Socket zu erstellen, wenden stream_set_blocking() an, um ihn zu konfigurieren, und stellen sicher, dass der Socket anschließend ordnungsgemäß geschlossen wird.
Fazit
Die Steuerung des Blockiermodus eines Sockets ist für die Optimierung von Leistung und Ressourcennutzung in PHP-Netzwerkanwendungen unerlässlich. Durch die Verwendung von stream_set_blocking() können Sie Sockets je nach Bedarf Ihrer Anwendung einfach so konfigurieren, dass sie bei E/A-Operationen pausieren oder sofort zurückkehren. Wir hoffen, dass dieser Leitfaden Ihnen bei der Implementierung eines effizienten Socket-Managements in Ihren Projekten hilft.
Practice
In PHP, what does the socket_set_blocking() function do?