天天看点

[李景山php] swoole 进程间 通信

$workers = [];// 进程仓库
$worker_num = ;// 最大进程数
// 循环创建子进程
for($i = ; $i < $worker_num; $i++){
    $process = new swoole_process('callback_function', false, false);
    $process->useQueue();// 开启队列使用,类似于全局队列
    $pid = $process->start();//开启进程
    $workers[$pid] = $process;// 存入句柄仓库
}
// 子进程执行函数
function callback_function(swoole_process $worker){
    $recv = $worker->pop();// 获取队列数据
    echo "从主进程获取数据: $recv\n";
    sleep();//睡觉2秒
    $worker->exit();// 当前子进程结束
}
// 主进程内,新增队列数据
foreach($workers as $pid => $process){
    $process->push("Hello 子进程[$pid]\n");
}
// 两次等待子进程结束
for($i = ; $i < $worker_num; $i++){
    // 回收子进程 否则出现僵尸进程
    $ret = swoole_process::wait();// 回收结束运行的子进程,如果子进程结束。类似于 join
    $pid = $ret['pid'];
    unset($workers[$pid]);
    echo "子进程退出, PID=".$pid.PHP_EOL;
}