Méthode Swoole de communication inter-processus
pipe pipe
Le pipeline est utilisé entre les processus Pour l'interaction des données, le système Linux lui-même fournit la fonction de canal permettant de créer un pipeline de communication semi-duplex. Dans la méthode de communication semi-duplex, les données ne peuvent circuler que dans un sens (une extrémité lit uniquement et l'autre extrémité écrit uniquement) et ne peuvent être utilisées qu'entre des processus qui ont une relation (processus parent-enfant). (Apprentissage recommandé : tutoriel vidéo swoole )
Les tuyaux sont le moyen le plus basique de communication inter-processus IPC. Il existe deux types de tuyaux : les tuyaux nommés et les tuyaux anonymes.
Tube anonyme : spécialement utilisé pour compléter le transfert de données entre les processus ayant des liens de sang. Pipes nommées : peuvent être utilisées entre deux processus quelconques. Les pipes dans Swoole sont des pipes anonymes.
Utilisez eventfd et UnixSock pour encapsuler deux types de tuyaux dans Swoole, rendant ainsi la communication entre les processus plus flexible.
Le module Process de Swoole dispose d'un pipeline intégré pour la communication inter-processus. Lors de la création d'une instance de processus, tant que l'option $pipe_type est activée, la couche inférieure de Swoole créera automatiquement une instance. pipeline. Si une explication est nécessaire ici, bien qu'il soit appelé un tube dans son nom, la communication sous-jacente dans la nouvelle version de Swoole est en fait implémentée via UnixSock , ce n'est donc pas un pipeline Linux au vrai sens du terme.
Créer un processus
swoole_process::__construct( callable $function, bool $redirect_stdin_stdout = false, int $pipe_type = SOCK_DGRAM, bool $enable_coroutine = false );
Le type de tuyau $pipe_type peut être divisé en trois types :
0 signifie ne pas créer de pipe
1 signifie créer un tube de type SOCK_STREAM
2 signifie créer un tube de type SOCK_DGRAM
Lorsque $redirect_stdin_stdout est activé, l'option $pipe_type ignorera les paramètres utilisateur et être forcé à 1.
Descripteur de tuyau
Lorsque le processus est forké, les objets Process dans le processus parent et le processus enfant seront définis avec une variable membre nommée pipe, qui stocke le descripteur de l'UnixSocket sous-jacent. Le processus parent et le processus enfant peuvent envoyer des données via ce descripteur de tube, ou ils peuvent appeler directement l'interface de lecture/écriture fournie par Process pour envoyer et recevoir des données.
object(Swoole\Process)#1 (6) { ["pipe"]=>int(4) ["callback"]=>NULL ["msgQueueId"]=>NULL ["msgQueueKey"]=>NULL ["pid"]=>int(287) ["id"]=>NULL}
Pipeline lire et écrire
swoole_process->write(string $data) Écrire des données dans le tube du processus
swoole_process-> (int $buffer_size = 8192) lit les données du tube du processus
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!