swoole进程间怎么通信

  介绍

这篇文章给大家分享的是有关swoole进程间怎么通信的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。

<强> swoole进程间通信的方式

<强>管道管

管道用于进程之间的数据交互,Linux系统本身提供了管函数用于创建一个半双工通信管道。半双工的通信方式中数据只能单向流动(一端只读一端只写),只能在具有亲缘关系(父子进程)的进程之间使用。

管道是进程间通信IPC中最基础的方式,管道有两种类型分别是命名管道,匿名管道。

匿名管道:专门用于具有血缘关系的进程之间,完成数据传递。命名管道:可以用在任何两个进程之间,swoole中的管道都是匿名管道。

在swoole中利用eventfd和UnixSock封装了两种管道,使得进程之间的通信更加灵活。

<强> swoole的过程模块内置了管道的方式用于进程间通信,在构建过程实例时只要开启了美元pipe_type选项,swoole底层会自动创建一个管道,这里需要说明的时,虽然名字上叫做管道,但实际上在新版swoole中底层通信是通过UnixSock实现的强,所以并不是真正意义上的Linux管。

<强>创建进程

swoole_process:: __construct (   callable  $函数,,   bool  redirect_stdin_stdout 美元;=,假的,,   int  pipe_type 美元;=,SOCK_DGRAM,,   bool  enable_coroutine 美元=false   );

<>强管道类型pipe_type美元可分为三种:

0表示不创建管道

1表示创建SOCK_STREAM类型的管道

2表示创建SOCK_DGRAM类型的管道

当启用redirect_stdin_stdout美元后,美元pipe_type选项将忽略用户参数,强制为1 .

<强>管道描述符

当进程被叉出来后,父进程和子进程中的过程对象会被设置上一个名为管的成员变量,存放着底层UnixSocket的描述符,父进程和子进程可以通过这个管道描述符来发送数据,也可以直接调用过程提供的读/写接口来收发数据。

对象(Swoole \过程)# 1,(6),{   (“pipe")才能=祝辞int (4)   (“callback")才能=祝辞NULL   (“msgQueueId")才能=祝辞NULL   (“msgQueueKey")才能=祝辞NULL   (“pid")才能=祝辞int (287)   (“id")才能=祝辞零}

<强>管道读写

swoole_process→写(字符串$ data)向进程的管道中写入数据

swoole_process→读(int buffer_size=8192美元)从进程的管道中读取数据

swoole进程间怎么通信