swoole http_serverマルチプロセスおよびマルチプロセスを使用してメッセージを処理

2006 ワード

set([
                 'worker_num' =>3, //     
                'daemonize' => true, //      
            ]);
$http->on('request','Run');

function Run($request, $response)
{
    $url=$request->server['request_uri'];
    if($url!='/favicon.ico'){
        $m = [1,2,3,4,5,6,7,8,9];
        p($m);
    }
    $response->end('  ');
}

function p($messages)
{
    $worker_num = 5;
    $process_pool = [];

    $process= null;
    $pid = posix_getpid();
    $customMsgKey = 1;
    $mod = 2 | swoole_process::IPC_NOWAIT;//              

    for($i=0;$iuseQueue($customMsgKey, $mod);
        $process->start();
        $pid = $process->pid;
        $process_pool[$pid] = $process;
    }
    //                 ,                
    $process = current($process_pool);
    foreach ($messages as $msg) {
        $process->push($msg);
    }

}


function sub_process(swoole_process $worker)
{
        sleep(1); //                     
        // echo "worker ".$worker->pid." started".PHP_EOL;
        while($msg = $worker->pop()){
            echo $msg;
            if ($msg === false) {
                break;
            }
            $sub_pid = $worker->pid;
            // echo "[$sub_pid] msg : $msg".PHP_EOL;
            file_put_contents(__DIR__.'/a.txt',"[$sub_pid] msg : $msg".PHP_EOL,FILE_APPEND);
            sleep(1);//   sleep      ,    1 worker          
        }
        // echo "worker ".$worker->pid." exit".PHP_EOL;
        $worker->exit(0);
}

$http->start();