在Server程序中如果需要执行很耗时的操作,比如一个聊天服务器发送广播,Web服务器中发送邮件。如果直接去执行这些函数就会阻塞当前进程,导致服务器响应变慢。
模拟业务场景:使用form表单提交数据,完成注册并发送激活邮件的功能。
客户端提交post数据->服务器获取到数据->完成注册将用户数据写入数据库->发送账号激活邮件->返回客户端提示注册成功。
这个业务逻辑是没有问题的,但是由于发送邮件是一个耗时操作(比如2-3s)并且会同步阻塞程序的执行,直到发送成功以后响应到客户端提示注册成功。这个过程中用户从提交到最后得到注册成功的提示估计需要4s左右,一次请求响应需要4s这肯定是不合理的!
现在使用Task异步任务投递可以大大提升用户体验,大致流程:
客户端提交post数据->服务器获取到数据->完成注册将用户数据写入数据库->马上返回客户端提示注册成功
在注册成功同时投递一个task任务->异步完成邮件发送的耗时操作 (这部分时间用户是无感知的,因为很早已经响应回客户端了)。
如何使用Think-Swoole的Task异步任务投递:
定义事件监听类(php think make:listener 类名)
app/event.php文件中定义swoole.task的事件监听
获取到Swoole/Server对象调用task方法(参数中传递刚刚定义的监听类)
在刚刚定义的事件监听类的handle方法中定义触发回调逻辑代码
调用触发task任务完成后的finish方法(需要才调用,非必须)

根据上面流程,完成一次实操:
进入tp61根目录运行:php think make:listener TaskTest
自动生成了app\listener\TaskTest事件监听类

在app/event.php中的数组listen键中定义swoole.task事件的监听


之后编辑异步文件代码

之后在任意方法中调用task异步的事件 (三种方法都可以 任选)

//方法一
public function tasktest(){$swoole = app('swoole.server');$swoole -> task(\app\listener\TaskTest::class);echo "成功";
}

方法二

public function tasktest(\Swoole\Server $server){$server -> task(\app\listener\TaskTest::class);echo "成功";
}

方法三

public function tasktest(\think\swoole\Manager $manager){$manager->getServer() -> task(\app\listener\TaskTest::class);echo "成功";
}

thinkphp6 task异步相关推荐

  1. mysql异步task_EasySwoole高性能task异步任务

    EasySwoole高性能task异步任务 羡仙. • 2019 年 06 月 20 日 和上一篇一样也是遗漏的重要文章,我太聪明了,这都能发现...他们都有共同的特征:笔记里的开头在上一篇...不管 ...

  2. RavenDb中的Task异步应用.Net4

    internal partial class RavenService : ServiceBase {  private RavenDbServer server;  private Task sta ...

  3. C# Task异步编程

    1.不适用异步的示例 using System; using System.Collections.Generic; using System.Linq; using System.Text; usi ...

  4. swoole task 异步任务 注释请忽略 自己加的不一定对 别误导大家。。。。。。

    注释可以忽略不计 个人加的 可能会有错误 别误导大家... server端 <?php class Server {private $serv;public function __constru ...

  5. .NET 4.5 Task异步编程学习资料

    参考资料: 1. http://www.cnblogs.com/heyuquan/archive/2013/04/18/3028044.html 转载于:https://www.cnblogs.com ...

  6. Task/Parallel实现异步多线程

    代码: #region Task 异步多线程,Task是基于ThreadPool实现的{//TestClass testClass = new TestClass();//Action<obje ...

  7. tornado celery mysql_Python3.7+Tornado5+Celery3+Rabbitmq3实现异步队列任务

    在之前的一篇文章中提到了用Django+Celery+Redis实现了异步任务队列,只不过消息中间件使用了redis,redis作为消息中间件可谓是差强人意,功能和性能上都不如Rabbitmq,所以本 ...

  8. 异步任务,邮箱任务,定时任务

    task~ 异步任务 邮箱任务 定时任务 源码下载 异步任务 开启多线程,我飞了. package cn.bitqian.service;import org.springframework.sche ...

  9. IMI 基于 Swoole 开发的协程 PHP 开发框架 常驻内存、协程异步非阻塞

    介绍 IMI 是基于 Swoole 开发的协程 PHP 开发框架,拥有常驻内存.协程异步非阻塞IO等优点. IMI 框架文档丰富,上手容易,致力于让开发者跟使用传统 MVC 框架一样顺手. IMI 框 ...

  10. python 多线程 异步_python 多线程异步

    最近做了个爬取代理的爬虫,使用了python的aysncio及concurrent.futures的ThreadPoolExecutor(线程池)技术,最终完成了多线程下的异步抓取,在此mark下,以 ...

最新文章

  1. 【数学专题】约数个数与欧拉函数
  2. java绘等高线图_Matplotlib中的极坐标等高线图
  3. jvm性能调优 - 02JVM中内存区域
  4. idea连接mysql
  5. 使用Apache Isis快速进行SEMAT应用程序开发
  6. C#接口归纳总结实例详解
  7. Node 中的path模块
  8. 简单的反U盘病毒(删除不了的畸形文件夹)
  9. 【牛客网-公司真题-前端入门篇】——如何快速上手牛客
  10. mysql自学完整_MySQL自学篇(三)
  11. 社交电商“百花齐放”,光鲜背后是大战将起
  12. 打出一个平行四边形的C语言程序,用汇编语言编写一个平行四边形输出程序,图形如下...
  13. 【Kubernetes学习笔记】-kubeadm 手动搭建kubernetes 集群
  14. java项目前有红色叉号_eclipse导入项目后出现红色叉号的解决方案
  15. 教你如何做好微信客户管理?做到这3点,效率翻5倍
  16. 4个设计APP产品不得不知道的心理学原理
  17. LTE下行物理层传输机制(3)-PHICH信道
  18. 单片机光敏电阻控制蜂鸣器_光敏电阻控制蜂鸣器的开关,当值大于200时关,反之则开。...
  19. MySQL数据库的约束
  20. 清空mysql 表数据

热门文章

  1. readelf命令使用
  2. cuda和cudnn下载地址
  3. 【白皮书】2020腾讯人工智能白皮书.pdf(附下载链接)
  4. ABAQUS2018汉化
  5. 影视后期好学吗?C4D精品教学合集,看完必成大神!(附链接)
  6. python拟合直线的斜率_线性曲线拟合总是得到斜率和y的中间值为1
  7. Cplex安装教程与使用介绍
  8. 抖音快手无水印视频下载教程解析
  9. 全面的C#编码规范整理
  10. 计算机室和电子备课室管理制度,电子备课室管理制度