天天看點

[李景山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;
}