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();