Swoole从入门到入土(5)——TCP服务器[异步任务]

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

        无论对于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_

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值