这篇文章给大家分享的是有关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美元)从进程的管道中读取数据