- swoole_process提供了基于unixsock的进程间通信,使用很简单只需调用write/read或者push/pop即可
- swoole_process支持重定向标准输入和输出,在子进程内echo不会打印屏幕,而是写入管道,读键盘输入可以重定向为管道读取数据
- 配合swoole_event模块,创建的PHP子进程可以异步的事件驱动模式
- swoole_process提供了exec接口,创建的进程可以执行其他程序,与原PHP父进程之间可以方便的通信
<?php
$redirect_stdout = false;// 重定向输出
$worker_num = 2;//进程数量
$workers = [];//存放进程用的
for($i = 0; $i < $worker_num; $i++){
$process = new swoole_process('workerFunc',$redirect_stdout );
$pid = $process->start();
$workers[$pid] = $process;//将进程的句柄存起来 pid 为下标
}
// 主进程。
foreach($workers as $pid => $process){// $process 是子进程的句柄
$process->write("写入信息[$pid]\n");//向管道写入 $process->write($data);
echo "收到的信息: ".$process->read();//子进程句柄从自己的管道里面读取信息 $process->read();
echo PHP_EOL.PHP_EOL;
}
function workerFunc(swoole_process $worker){//子进程
$recv = $worker->read();
echo PHP_EOL. "从主进程发送的数据: $recv\n";
$worker->write("你好 , 我的 pipe 是 ". $worker->pipe ."; pid 是 ".$worker->pid."\n");
$worker->exit(0);
}