Think-Swoole的Task异步任务如何改写为长尾?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1239个文字,预计阅读时间需要5分钟。
使用场景:在Server程序中,若需要执行耗时操作,如聊天服务器发送广播、Web服务器发送邮件等。
直接执行这些函数会阻塞当前进程,导致服务器响应变慢。
使用场景
在 Server 程序中如果需要执行很耗时的操作,比如一个聊天服务器发送广播,Web服务器中发送邮件。如果直接去执行这些函数就会阻塞当前进程,导致服务器响应变慢。例如:用户注册场景,完成注册并发送激活邮件的功能,需要以下几步:
客户端提交 POST 数据 -> 服务器获取到数据 -> 完成注册将用户数据写入数据库 -> 发送账号激活邮件 -> 返回客户端提示注册成功。
这个业务逻辑是没有问题的,但是由于发送邮件是一个耗时操作(比如2-3s)并且会同步阻塞程序的执行,直到发送成功以后响应到客户端提示注册成功。这个过程中用户从提交到最后得到注册成功的提示估计需要4s左右,一次请求响应需要4s这肯定是不合理的!
现在使用 Task 异步任务投递可以大大提升用户体验,大致流程:
客户端提交 POST 数据 -> 服务器获取到数据 -> 完成注册将用户数据写入数据库 -> 马上返回客户端提示注册成功。
在注册成功同时投递一个 Task 任务 -> 异步完成邮件发送的耗时操作 (这部分时间用户是无感知的,因为很早已经响应回客户端了)。
如何使用 Think-Swoole 的 Task 异步任务的步骤
定义事件监听类(php think make:listener 类名)。
本文共计1239个文字,预计阅读时间需要5分钟。
使用场景:在Server程序中,若需要执行耗时操作,如聊天服务器发送广播、Web服务器发送邮件等。
直接执行这些函数会阻塞当前进程,导致服务器响应变慢。
使用场景
在 Server 程序中如果需要执行很耗时的操作,比如一个聊天服务器发送广播,Web服务器中发送邮件。如果直接去执行这些函数就会阻塞当前进程,导致服务器响应变慢。例如:用户注册场景,完成注册并发送激活邮件的功能,需要以下几步:
客户端提交 POST 数据 -> 服务器获取到数据 -> 完成注册将用户数据写入数据库 -> 发送账号激活邮件 -> 返回客户端提示注册成功。
这个业务逻辑是没有问题的,但是由于发送邮件是一个耗时操作(比如2-3s)并且会同步阻塞程序的执行,直到发送成功以后响应到客户端提示注册成功。这个过程中用户从提交到最后得到注册成功的提示估计需要4s左右,一次请求响应需要4s这肯定是不合理的!
现在使用 Task 异步任务投递可以大大提升用户体验,大致流程:
客户端提交 POST 数据 -> 服务器获取到数据 -> 完成注册将用户数据写入数据库 -> 马上返回客户端提示注册成功。
在注册成功同时投递一个 Task 任务 -> 异步完成邮件发送的耗时操作 (这部分时间用户是无感知的,因为很早已经响应回客户端了)。
如何使用 Think-Swoole 的 Task 异步任务的步骤
定义事件监听类(php think make:listener 类名)。

