Think-Swoole之Task 异步任务

Think-Swoole之Task 异步任务

使用场景

在 Server 程序中如果需要执行很耗时的操作,比如一个聊天服务器发送广播,Web服务器中发送邮件。如果直接去执行这些函数就会阻塞当前进程,导致服务器响应变慢。例如:用户注册场景,完成注册并发送激活邮件的功能,需要以下几步:

客户端提交 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 swoole.finish任务完成后的 finish 方法(需要才调用,非必须)。

jQuery任务栏 jQuery任务栏

基于jQueryUI动画效果与拖动方法实现任务栏放大、缩小、可拖动

jQuery任务栏 6 查看详情 jQuery任务栏

进行演示

首先,项目根目录创建邮件发送事件:

php think make:listener EmailTask

然后定义创建的邮件发送事件:

app/event.php'listen'    => [    'AppInit'  => [],    'HttpRun'  => [],    'HttpEnd'  => [],    'LogLevel' => [],    'LogWrite' => [],    'swoole.task' => [        applistenerEmailTask::class,    ],//  'swoole.finish' => [//      applistenerEmailTaskFinish::class,//  ],],

其中 swoole.task 这个键名是 Task 任务固定写法不能随意命名。

接着,我们在负责用户注册的控制器内,通过 Swoole/Server 类来调用 Task 异步任务,当然,我们要先完善 EmailTask.php 的逻辑代码:

app/listener/EmailTask.php

 finish(applistenerEmailTaskFinish::class);    }}

注册方法 app/controller/Register.php

 request -> isPost()){            $data = $this -> request -> post();            //TODO 调用验证类验证数据            //TODO 将注册信息插入数据库            // 这里调用 Task 异步任务            $server -> task(applistenerEmailTask::class);            // 方式二//            $manager = app('thinkswooleManager');//            $manager -> getServer() -> task(applistenerEmailTask::class);            return "注册成功!".time();        }    }}

注册业务中,插入数据库后,调用了发送邮件异步任务,在 EmailTask.php 模拟发送邮件需要 3 秒钟。

开启 Think-Swoole 服务,访问注册的方法,测试一下发送邮件的时间是否计入用户注册方法内:

0b56ff1aa87aeeb13a04a280c258546.png

可见,邮件发送的 3 秒钟是异步进行的,用户并无感知。

另外,还有个 swoole.finish 事件,用来通知其他事件当前异步任务已经完成了,同样需要创建事件,在 app/event.php 中定义 swoole.finish,上述示例代码已经演示了。

以上就是Think-Swoole之Task 异步任务的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/351595.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月5日 22:33:34
下一篇 2025年11月5日 22:34:43

相关推荐

  • TP6 Think-Swoole RPC服务的数据传输压缩与优化

    TP6 Think-Swoole RPC服务的数据传输压缩与优化 引言:近年来,随着互联网技术的迅猛发展,大规模分布式系统的应用越来越广泛。在分布式系统中,远程过程调用(RPC)是实现不同系统之间通信的常用方式。而在PhP领域中,ThinkPHP6框架与Think-Swoole扩展是一对强大的组合,…

    2025年11月28日
    000
  • TP6 Think-Swoole RPC服务的高可扩展性与分布式部署

    TP6(ThinkPHP 6)是一款基于PHP的开源框架,具有高可扩展性与分布式部署的特点。本文将介绍如何使用TP6配合Swoole扩展,搭建一个具备高可扩展性的RPC服务,并给出具体的代码示例。 首先,我们需要安装TP6和Swoole扩展。在命令行中执行以下命令: composer require…

    2025年11月27日
    000
  • TP6 Think-Swoole RPC服务的性能优化与调试

    TP6 Think-Swoole RPC服务的性能优化与调试 一、引言 随着互联网的迅猛发展,分布式计算已经成为了现代软件开发中不可或缺的一部分。在分布式计算中,RPC(Remote Procedure Call,远程过程调用)是一种常用的通信机制,通过它可以实现跨网络的方法调用。Think-Swo…

    2025年11月27日
    000
  • TP6 Think-Swoole构建的RPC服务与Web服务的互通

    TP6 Think-Swoole构建的RPC服务与Web服务的互通 随着互联网的发展,越来越多的应用需求需要构建分布式系统。而在建立分布式系统时,RPC(Remote Procedure Call)是一个重要的通信机制,它可以使不同的服务节点之间实现远程调用。 在开发中,我们常使用ThinkPHP作…

    2025年11月27日
    000
  • TP6 Think-Swoole构建的RPC服务与微服务架构实践案例

    TP6 Think-Swoole构建的RPC服务与微服务架构实践案例 引言:随着互联网的快速发展以及业务规模的扩大,传统的单体架构已经无法满足大规模业务场景的需求。因此,微服务架构应运而生。在微服务架构中,RPC(Remote Procedure Call)服务是实现服务间通信的一种重要方式。通过R…

    2025年11月27日
    000
  • Think-Swoole教程之热更新

    最近开始接触和开发swoole,刚开始接触的时候真的是一脸蒙圈,找了很多资料去了解。最近在做swoole的一些高级功能,结合实际项目总结一些thinkphp6.0框架集成swoole的一些经验,结合网络上的一些资料整理后分享出来。 推荐教程:《thinkphp》《swoole教程》 由于 Swool…

    2025年11月25日 PHP框架
    000
  • Think-Swoole教程之安装

    swoole 是 php 的一个扩展,因此安装 swoole 本质上就是安装一个 php 扩展。swoole 仅支持 linux、freebsd、macos 三种操作系统。 推荐教程:《thinkphp》《swoole教程》 安装准备 安装前必须保证系统已经安装了下列软件 php-7.1 或更高版本…

    2025年11月16日
    000
  • Think-Swoole之WebSocket-Room加入、离开房间和房间消息发送

    think-swoole 3.0 中 websocket 新增了 room 聊天室功能,它主要用于群发消息,但不同room之间的消息又是相互隔离的。当我们进入一个聊天室,那么我们的进入、离开以及发送的消息只有这个聊天室的 fd 能接收到。 config.swoole.php ‘websocket’ …

    2025年11月16日
    000
  • TP6 Think-Swoole RPC服务的性能测试与性能调优

    TP6 Think-Swoole RPC服务的性能测试与性能调优 一、引言随着互联网的高速发展,分布式系统的应用越来越广泛。而在分布式系统中,RPC(远程过程调用)是一种常见的通信机制,它可以让不同节点的服务相互调用,实现分布式系统的协同工作。在TP6框架中,Think-Swoole作为一种高性能的…

    2025年11月10日 PHP框架
    100
  • TP6 Think-Swoole RPC服务的数据加密与身份认证机制

    TP6 Think-Swoole RPC服务的数据加密与身份认证机制 随着互联网的快速发展,越来越多的应用程序需要进行远程调用,以实现不同模块之间的数据交互和功能调用。在这样的背景下,RPC(Remote Procedure Call)就成了一种重要的通信方式。TP6 Think-Swoole框架可…

    2025年11月7日 PHP框架
    000
  • TP6 Think-Swoole的RPC服务与消息队列的集成与应用

    TP6 Think-Swoole的RPC服务与消息队列的集成与应用 在现代软件开发中,RPC服务(Remote Procedure Call)和消息队列是常见的技术手段,用于实现分布式系统中的服务调用和异步消息处理。在TP6框架中集成Think-Swoole组件,可以轻松实现RPC服务和消息队列的功…

    2025年11月7日 PHP框架
    000
  • Think-Swoole之WebSocket客户端消息解析与使用SocketIO处理用户UID与fd关联

    WebSocket 客户端消息的解析 前面我们演示了当客户端连接服务端,会触发连接事件,事件中我们要求返回当前客户端的 fd。当客户端发送消息给服务端,服务端会根据我们的规则将消息发送给指定 fd 的客户端: app/listener/WsConnect.php emit(‘sendfd’,$ws …

    2025年11月5日 PHP框架
    100
  • Think-Swoole之WebSocket 事件订阅

    通过前面的实例中,如果按照之前的事件监听方式,客户端的每个场景事件,服务端都需要创建每个对应的事件,如果事件太多, app/listener 目录下将会有很多的文件(其实也不算什么坏现象),事件订阅就是为了解决这一问题,把所有的事件都写在一个文件中。 下面用事件订阅的方式处理事件 首先需要把之前在 …

    2025年11月5日
    100
  • TP6 Think-Swoole实现的负载均衡RPC服务

    标题:TP6 Think-Swoole实现的负载均衡RPC服务 引言:近年来,随着互联网的迅猛发展,应用程序的性能和稳定性变得越来越重要。其中,负载均衡是提高系统性能和可靠性的关键因素之一。本文将介绍如何使用ThinkPHP6和Swoole扩展来实现一个负载均衡的RPC服务,并提供具体的代码示例。 …

    2025年11月4日 PHP框架
    000
  • TP6 Think-Swoole RPC服务的高性能数据库访问优化策略

    TP6 Think-Swoole RPC 服务的高性能数据库访问优化策略 引言:随着互联网技术的迅速发展,越来越多的应用程序需要高性能的数据库访问能力。在TP6 Think-Swoole框架中,RPC服务是实现高性能数据库访问的重要组件之一。本文将介绍一些优化策略,以提高TP6 Think-Swoo…

    2025年11月4日 PHP框架
    100
  • TP6 Think-Swoole RPC服务的高并发请求处理与调度

    TP6 Think-Swoole RPC服务的高并发请求处理与调度 随着互联网技术的不断发展,网络应用的并发请求处理和调度成为了一个重要的挑战。在TP6框架中,使用Think-Swoole扩展可以实现RPC(Remote Procedure Call)服务的高并发请求处理与调度。本文将介绍如何在TP…

    2025年11月1日
    000
  • TP6 Think-Swoole RPC服务的安全防护与授权验证

    TP6 Think-Swoole RPC服务的安全防护与授权验证 随着云计算和微服务的兴起,远程过程调用(RPC)成为了开发者们日常工作中必不可少的一部分。在开发RPC服务时,安全防护和授权验证是非常重要的,以确保只有合法的请求可以访问和调用服务。本文将介绍如何在TP6 Think-Swoole框架…

    2025年11月1日
    000

发表回复

登录后才能评论
关注微信