无论对于B/S还是C/S,程序再怎么变,唯一不变的是用户不想等太久的躁动心情。所以服务端对于客户的请求,能有多快就多快。如果服务端需要执行很耗时的操作,就需要异步任务处理机制,保证当前的响应速度不受影响。
现在以下面的一个例子为引子:
<?php
$server = new Swoole\Server('0.0.0.0', 9501);
$server->set([
'max_wait_time'=>60,
'reload_async'=>true,
'worker_num'=>1,
'task_worker_num'=>1,
'task_max_request'=>100
]);
//监听连接进入事件
$server->on('Connect', function ($server, $fd) {
});
//监听数据接收事件
$server->on('Receive', function ($server, $fd, $from_id, $data) {
$server->task("receive to task:$data"); //将任务丢入异步任务列队
});
$server->on("task",function ($serv, $fd, $from_id, $data){
//在这里处理任务
$serv->finish("$data ok"); //处理完成后,将结果传给finish
});
$server->on("finish",function ($serv, $task_id, $data){
//处理任务完成后的事情
echo "finish $data\n";
});
//监听连接关闭事件
$server->on('Close', function ($server, $fd) {
});
//启动服务器
$server->start();
上面这个例子,在之前的代码上增加了两个属性(task_worker_num和task_max_request)和两个事件(onTask和onFinish)。代码中同时设置了这四项,便可以启动swoole的异步任务处理。是不是很简单?
那么现在分别了解关于异步任务的新属性和事件:
新配置:
1) task_worker_num:配置 Task 进程的数量。【默认值:未配置则不启动 task】
配置此参数后将会启用 task 功能。所以 Server 必须要注册 onTask、onFinish 2 个事件回调函数。如果没有注册,服务器程序将无法启动。
注意:
Task 进程是同步阻塞的;
最大值不得超过 swoole_cpu_num() * 1000;
如果单个 task 的处理需要 100ms,那一个进程 1 秒就可以处理 1/0.1=10 个 task;则task 投递的速度,如每秒产生 2000 个 task,2000/10=200,就需要设置 task_

文章介绍了Swoole服务器中如何使用异步任务处理来优化响应速度,包括设置task_worker_num以启动Task进程,利用onTask和onFinish事件处理任务,以及配置如task_max_request等参数。此外,还提到了Task进程的同步阻塞特性以及IPC通信方式如UnixSocket和sysvmsg。
最低0.47元/天 解锁文章
2227

被折叠的 条评论
为什么被折叠?



