(PECL swoole >= 1.9.0)
Swoole\Event::write — Écrit des données sur un socket de manière asynchrone
Rend l'envoi de données asynchrone pour les ressources de flux et de sockets.
Note:
Si des données sont écrites en continu sur un socket alors que le pair ne les lit pas assez vite, le tampon du socket finit par être saturé. Dans ce cas, la couche basse de Swoole stocke les données excédentaires dans un tampon en mémoire et attend le déclenchement de l'événement d'écriture avant de tenter d'écrire à nouveau sur le socket. Cependant, si ce tampon en mémoire est lui aussi saturé, Swoole émet l'erreur « pipe buffer overflow, reactor will block » et bascule en mode bloquant, suspendant les écritures suivantes jusqu'à ce que de la place se libère.
Note:
Le retour de
falselorsque le tampon est saturé est une opération atomique : soit la totalité des données est écrite, soit rien ne l'est.
Event::write ne peut pas être utilisée avec des flux ou des sockets chiffrés en SSL/TLS (connexions tunnelisées).
En cas de succès, Event::write bascule automatiquement $socket en mode non bloquant.
fdDescripteur de fichier (ressource de flux ou de socket, entier, ou objet).
dataDonnées à envoyer (leur longueur ne doit pas dépasser la taille du tampon du socket).
Exemple #1 Exemple avec Swoole\Event::write()
<?php
use Swoole\Event;
$fp = stream_socket_client('tcp://127.0.0.1:9501');
$data = str_repeat('A', 1024 * 1024*2);
Event::add($fp, function($fp) {
echo fread($fp);
});
Event::write($fp, $data);
?>