Lors du réseau de programmation en PHP, les opérations de socket sont le contenu de base et important. La fonction SOCKET_SET_BLOCK est une fonction couramment utilisée lors du fonctionnement des sockets. Il est utilisé pour définir le mode de blocage de la prise. Cet article se concentrera sur le rôle de la fonction socket_set_block dans le processus de connexion client et expliquera son utilisation via un exemple réel.
La fonction socket_set_block est utilisée pour définir la prise spécifiée sur le mode de blocage. Le mode soi-disant de blocage fait référence au moment où les opérations de lecture et d'écriture sont effectuées, si les données sont temporairement indisponibles, la fonction attendra que les données soient disponibles ou que l'opération soit terminée.
La syntaxe est la suivante:
bool socket_set_block ( resource $socket )
$ socket : ressource de socket qui nécessite du mode de réglage.
La valeur de retour est booléen, et le paramètre renvoie true si vrai réussit, et l'échec renvoie faux si faux .
Relativement, il existe également une fonction Socket_Set_Set_NonBlock , qui définit la prise en mode non bloquant, et les opérations de lecture et d'écriture n'attendront pas le retour immédiat.
Lorsqu'un client se connecte au serveur via une prise, il doit généralement attendre que la connexion soit établie avec succès ou attendre que le serveur renvoie des données. Le mode de blocage fait que l'appel de socket du client attend automatiquement que le résultat revienne comme un appel de fonction normal, ce qui est simple et intuitif à programmer.
Par exemple, lors de l'appel socket_connect , si en mode de blocage, la fonction bloquera le programme actuel jusqu'à ce que la connexion soit réussie ou échouée, ce qui peut faciliter le jugement d'erreur et l'échange de données ultérieur.
Dans certains scénarios, si le mode de blocage n'est pas utilisé, le processus de connexion deviendra compliqué et l'état de connexion doit être détecté en continu à l'aide de mécanismes de sondage ou d'événements.
Voici un exemple de client PHP simple qui montre comment définir une prise sur le mode de blocage à l'aide de la fonction socket_set_block , connecter au serveur et envoyer des données.
<?php
// créerTCPPrises
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
die("créerPrises失败: " . socket_strerror(socket_last_error()));
}
// Défini sur le mode de blocage,Assurez-vous que les opérations ultérieures seront terminées
if (!socket_set_block($socket)) {
die("Échec de la définition du mode de blocage");
}
// Connectez-vous au serveur,Pour l'adresse du serveurgitbox.netAu lieu du nom de domaine réel,Le port est80
$server = 'gitbox.net';
$port = 80;
if (!socket_connect($socket, $server, $port)) {
die("Connectez-vous au serveur失败: " . socket_strerror(socket_last_error($socket)));
}
// structureHTTPDemander des données
$request = "GET / HTTP/1.1\r\n";
$request .= "Host: $server\r\n";
$request .= "Connection: Close\r\n\r\n";
// Envoyer une demande
socket_write($socket, $request, strlen($request));
// Lisez la réponse
$response = '';
while ($out = socket_read($socket, 2048)) {
$response .= $out;
}
// 关闭Prises
socket_close($socket);
// Contenu de réponse de sortie
echo $response;
?>