swoole异步处理
服务器端
$serv = new Swoole\Server("0.0.0.0", 9501);
//设置异步任务的工作进程数量
$serv->set(array(
'worker_num' => 2,
'task_worker_num' => 4
));
//此回调函数在worker进程中执行
$serv->on('receive', function($serv, $fd, $from_id, $data) {
$data = trim($data);//传递的header和参数都在$data中;参数在最后一位
$data = explode("\n",$data);//拆分为数组
$data = json_decode(end($data),true);//json请求参数,取数组最后一位
sleep(10);
echo "\n";
var_dump($data);
//投递异步任务
$task_id = $serv->task($data);
});
//处理异步任务(此回调函数在task进程中执行)
$serv->on('task', function ($serv, $task_id, $from_id, $data) {
$str = "New AsyncTask[id=$task_id]".PHP_EOL;
file_put_contents('aa.txt',$str,FILE_APPEND);
//返回任务执行的结果
$serv->finish("task_id -> OK");
});
//处理异步任务的结果(此回调函数在worker进程中执行)
$serv->on('finish', function ($serv, $task_id, $data) {
echo "AsyncTask[$task_id] Finish: $data".PHP_EOL;
});
$serv->start();
服务器请求
$data = array(
'info'=>'test',
);
_curl_init_post("http://127.0.0.1:9501",$data);
function _curl_init_post($c_url, $c_url_data, $header='')
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $c_url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt ($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT_MS, 1);//设置1秒过期时间
// curl_setopt($ch, CURLOPT_NOSIGNAL, 1);//出现报错为cURL Error (28): Timeout was reached时可以打开此项
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($c_url_data));
if($header) curl_setopt($ch,CURLOPT_HTTPHEADER,$header);
curl_close($ch);
unset($ch);
}