mysql异步task_swoole学习手记(四)异步任务task

目录

持续更新中。。。

什么是异步任务?

1.把当前的任务异步投递到TaskWorker进程池中执行,不影响接下来的事务。

举个栗子:

1d25f787f24b4f157f9637e9b9295228.png

在一些需要耗时间长的任务可以采取这种方案

不管从性能的发挥还是用户体验都是比传统的方式舒服很多

测试

web_server.php

$server = new swoole_websocket_server("0.0.0.0", 8811);

$server->set(

[

'task_worker_num' => 2,//设置异步任务的工作进程数量,可以根据任务的耗时和任务量配置适量的task进程。

]

);

$server->on('message', function ($server, $frame) {

echo 'fd为: '.$frame->fd.'发送了:'.$frame->data."\n";

//投递异步任务

$task_id = $server->task($frame->fd);

echo "我们继续访问\n";

});

$server->on('task', function ($server, $task_id, $from_id,$data) {

for ($i=1; $i <=5 ; $i++) {

sleep(2);//休息2秒

echo 'taskid为:'.$task_id.'完成任务'.$i."/5的任务了\n";

}

$server->finish($data);

});

//处理异步任务的结果

$server->on('finish', function ($server, $task_id, $data) {

echo 'fd为:'.$data.',task为:'.$task_id.'任务完成的时间是:'.date('Y-m-d H:i:s')."\n";

});

$server->start();

客户端js代码

var url='ws://你的ip地址:8811';

var websocket =new WebSocket(url);

websocket.onopen = function (evt) {

console.log("Connected to WebSocket server.");

websocket.send('客户端:建立链接成功');

};

websocket.onclose = function (evt) {

console.log("Disconnected");

};

websocket.onmessage = function (evt) {

console.log('Retrieved data from server: ' + evt.data);

};

websocket.onerror = function (evt, e) {

console.log('Error occured: ' + evt.data);

};

我们先打开web_server,

然后通过浏览器打开2个客户端,这里为了区别进程,2个客户端打开的时间我是相差了几秒打开的

这个时候看终端,重点来了:

f05424cfb3d3fb1bdf0b0970942faaa9.png

结论

所以我们得出了以下的结论:

1.task可以作为进程在后台运行不影响后面的执行,这里是异步的

2.task可以设置多个,一个task被占用,就使用另一个,

3.task完成任务之后,它就会被闲置,可以给下个客户端使用(本案例没有展示出效果,有兴趣可以test一下)

注意的地方

1.这个要注意task的数目,防止开销过多的性能

2.注意防止进程的堵塞,阻塞的进程十分耗资源而已长期占用无法被下个客户端使用

3.exit/die是危险的,会导致Worker进程退出

扩展

swoole里面的异步IO 读写文件 读写mysql 读写redis 也是异曲同工

异步IO 是先返回结果 再进行IO,不过这种大多应用于耗时间长但是结果不影响程序的情况,比如:

文章阅读量+1

同步的流程是 redis/mysql 数据+1->显示文章

而异步的流程是 直接显示文章 然后再发redis/mysql 数据+1

这样子用户就减少了等待的时间,当然还有很多场景也适用

有兴趣的小伙伴可以继续研究文档io的部分,这里就不继续深究了

如果这篇文章对你有用,可以点个赞或者是收藏,算是对作者的鼓励~

另附上小弟网站。。。www.entercode.cn 推广一波...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值