function callback_function(swoole_process $worker) { //echo "Worker: start. PID=".$worker->pid."\n"; //recv data from master $recv = $worker->pop(); echo "From Master: {$recv}\n"; sleep(2); $worker->exit(0); }
function child_sync(swoole_process $worker) { //echo "Worker: start. PID=".$worker->pid."\n"; //recv data from master $recv = $worker->read(); echo "From Master: {$recv}\n"; //send data to master $worker->write("hello master\n"); sleep(2); $worker->exit(0); }
function callback_process_function(swoole_process $worker) { set_time_limit(300); $task = json_decode($worker->read(), true); $worker->name('crontab.php worker=' . $task['uniqid']); $Handle = new TimingCall_Handle($task); $Handle->upNextExecuteTime(); $Handle->refreshStatistics(); $Handle->Execute(); $worker->exit(0); }
function callback_function(swoole_process $worker) { //echo "Worker: start. PID=".$worker->pid."\n"; //recv data from master $cnt = 0; while ($cnt < 2) { // 如果队列里没有数据,则pop方法阻塞等待 $recv = $worker->pop(); echo "From Master: {$recv}\n"; $cnt++; } sleep(1); $worker->exit(0); }
public function onTmpProcess(swoole_process $worker) { $cmd = $worker->read(); $handle = popen($cmd, 'r'); swoole_event_add($worker->pipe, function () use($worker, $handle) { $cmd = $worker->read(); if ($cmd == 'exit') { $worker->exit(); } fwrite($handle, $cmd); }); while (!feof($handle)) { $buffer = fread($handle, 18192); echo $buffer; } }
global $workers; $worker = $workers[$pipe]; $data = $worker->read(); if ($data == false) { //表示子进程已关闭,回收它 $status = swoole_process::wait(); echo "Worker#{$status['pid']} exit\n"; } else { echo "RECV: " . $data; } } //循环创建进程 for ($i = 0; $i < $worker_num; $i++) { $process = new swoole_process(function (swoole_process $process) { $i = 1; while ($i++) { $process->write("Worker#{$process->id}: hello master\n"); if ($i > 5 and $process->id == 1) { $process->exit(); } sleep(1); } }); $process->id = $i; $pid = $process->start(); $workers[$process->pipe] = $process; } //将子进程的管道加入EventLoop foreach ($workers as $process) { swoole_event_add($process->pipe, 'onReceive'); }