Fonction PHP socket_set_blocking() : Tout ce que vous devez savoir
En tant que développeur PHP, vous devrez peut-être contrôler si une socket est bloquante ou non bloquante afin d'optimiser les performances et l'utilisation des ressources. La fonction socket_set_blocking() était historiquement utilisée à cette fin, mais elle a été dépréciée dans PHP 8.1 et supprimée dans PHP 8.2. La solution moderne est stream_set_blocking(). Dans cet article, nous verrons comment définir le mode bloquant d'une socket en utilisant la norme actuelle.
Qu'est-ce que stream_set_blocking() ?
stream_set_blocking() est la fonction PHP moderne utilisée pour définir le mode bloquant d'un flux ou d'une socket. Elle remplace la fonction dépréciée socket_set_blocking(). Lorsqu'un flux est en mode bloquant, les opérations d'E/S comme socket_read() ou socket_write() suspendront l'exécution jusqu'à ce que des données soient disponibles ou que l'opération soit terminée. En mode non bloquant, ces opérations retournent immédiatement, permettant à votre script de gérer d'autres tâches ou d'implémenter du polling.
Comment utiliser stream_set_blocking()
L'utilisation de stream_set_blocking() est simple. Voici la syntaxe de la fonction :
Syntaxe PHP de stream_set_blocking()
stream_set_blocking(resource|Socket $stream, bool $mode): boolLa fonction prend deux paramètres :
$stream: La ressource ou l'objetSocketde la socket ou du flux à configurer. Notez que les versions récentes de PHP utilisent des objetsSocketau lieu des anciennes ressources.$mode:truepour le mode bloquant,falsepour le mode non bloquant.
Voici un exemple d'utilisation de stream_set_blocking() avec une gestion d'erreurs appropriée et un nettoyage des ressources :
Comment utiliser 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);Dans cet exemple, nous utilisons socket_create() pour créer une nouvelle socket, appliquons stream_set_blocking() pour la configurer, et nous assurons que la socket est correctement fermée par la suite.
Conclusion
Contrôler le mode bloquant d'une socket est essentiel pour optimiser les performances et l'utilisation des ressources dans les applications réseau PHP. En utilisant stream_set_blocking(), vous pouvez facilement configurer les sockets pour qu'elles attendent lors des opérations d'E/S ou qu'elles retournent immédiatement, selon les besoins de votre application. Nous espérons que ce guide vous aidera à implémenter une gestion efficace des sockets dans vos projets.
Practice
In PHP, what does the socket_set_blocking() function do?