Rumah rangka kerja php ThinkPHP Think-Swoole之Task 异步任务

Think-Swoole之Task 异步任务

Oct 27, 2020 pm 01:39 PM
think-swoole

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 方法(需要才调用,非必须)。

进行演示

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

php think make:listener EmailTask
Salin selepas log masuk

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

app/event.php
'listen'    => [
    'AppInit'  => [],
    'HttpRun'  => [],
    'HttpEnd'  => [],
    'LogLevel' => [],
    'LogWrite' => [],
    'swoole.task' => [
        app\listener\EmailTask::class,
    ],
//  'swoole.finish' => [
//      app\listener\EmailTaskFinish::class,
//  ],
],
Salin selepas log masuk

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

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

app/listener/EmailTask.php

<?php
declare (strict_types = 1);
namespace app\listener;
class EmailTask
{
    /**
     * 事件监听处理
     *
     * @return mixed
     */
    public function handle($event)
{
        echo "开始发送邮件:".time();
        //模拟耗时 3 秒,测试是否在响应事件内
        sleep(3);
        echo "邮件发送成功:".time();
        // 可以调用 finish 方法通知其他事件类,通知当前异步任务已经完成了(非必须调用)
        // 参数 $event 是 Swoole\Server\Task 类的一个对象 可以调用 finish 方法触发 task 任务的 onFinish 事件
        // $event -> finish(\app\listener\EmailTaskFinish::class);
    }
}
Salin selepas log masuk

注册方法 app/controller/Register.php

<?php
namespace app\controller;
use app\BaseController;
class Register extends BaseController
{
    public function register(\Swoole\Server $server)
{
        if($this -> request -> isPost()){
            $data = $this -> request -> post();
            //TODO 调用验证类验证数据
            //TODO 将注册信息插入数据库
            // 这里调用 Task 异步任务
            $server -> task(\app\listener\EmailTask::class);
            // 方式二
//            $manager = app(&#39;\think\swoole\Manager&#39;);
//            $manager -> getServer() -> task(\app\listener\EmailTask::class);
            return "注册成功!".time();
        }
    }
}
Salin selepas log masuk

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

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

0b56ff1aa87aeeb13a04a280c258546.png

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

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

Atas ialah kandungan terperinci Think-Swoole之Task 异步任务. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Pengoptimuman prestasi dan penyahpepijatan perkhidmatan TP6 Think-Swoole RPC Pengoptimuman prestasi dan penyahpepijatan perkhidmatan TP6 Think-Swoole RPC Oct 12, 2023 am 11:16 AM

Pengoptimuman prestasi dan penyahpepijatan perkhidmatan TP6Think-SwooleRPC 1. Pengenalan Dengan perkembangan pesat Internet, pengkomputeran teragih telah menjadi bahagian yang amat diperlukan dalam pembangunan perisian moden. Dalam pengkomputeran teragih, RPC (RemoteProcedureCall, Remote Procedure Call) ialah mekanisme komunikasi yang biasa digunakan di mana panggilan kaedah merentas rangkaian boleh dilaksanakan. Think-Swoole, sebagai rangka kerja PHP berprestasi tinggi, boleh menyokong perkhidmatan RPC dengan baik. tetapi

Kebolehskalaan tinggi dan penyebaran perkhidmatan TP6 Think-Swoole RPC Kebolehskalaan tinggi dan penyebaran perkhidmatan TP6 Think-Swoole RPC Oct 12, 2023 am 11:07 AM

TP6 (ThinkPHP6) ialah rangka kerja sumber terbuka berdasarkan PHP, yang mempunyai ciri-ciri berskala tinggi dan penggunaan teragih. Artikel ini akan memperkenalkan cara menggunakan TP6 dengan sambungan Swoole untuk membina perkhidmatan RPC berskala tinggi dan memberikan contoh kod khusus. Pertama, kita perlu memasang sambungan TP6 dan Swoole. Jalankan arahan berikut dalam baris arahan: composerrequiretopthink/thinkpeclinstallswo

Pemprosesan permintaan serentak dan penjadualan perkhidmatan TP6 Think-Swoole RPC Pemprosesan permintaan serentak dan penjadualan perkhidmatan TP6 Think-Swoole RPC Oct 12, 2023 pm 12:33 PM

Pemprosesan permintaan serentak dan penjadualan perkhidmatan TP6Think-SwooleRPC Dengan perkembangan berterusan teknologi Internet, pemprosesan permintaan serentak dan penjadualan aplikasi rangkaian telah menjadi cabaran penting. Dalam rangka kerja TP6, sambungan Think-Swoole boleh digunakan untuk melaksanakan pemprosesan permintaan serentak tinggi dan penjadualan perkhidmatan RPC (RemoteProcedureCall). Artikel ini akan memperkenalkan cara membina perkhidmatan RPC berasaskan Think-Swoole dalam rangka kerja TP6 dan menyediakan

Penyulitan data dan mekanisme pengesahan identiti perkhidmatan TP6 Think-Swoole RPC Penyulitan data dan mekanisme pengesahan identiti perkhidmatan TP6 Think-Swoole RPC Oct 12, 2023 am 11:29 AM

Penyulitan data dan mekanisme pengesahan identiti perkhidmatan TP6Think-SwooleRPC Dengan perkembangan pesat Internet, semakin banyak aplikasi perlu membuat panggilan jauh untuk merealisasikan interaksi data dan panggilan fungsi antara modul yang berbeza. Dalam konteks ini, RPC (RemoteProcedureCall) telah menjadi kaedah komunikasi yang penting. Rangka kerja TP6Think-Swoole boleh melaksanakan perkhidmatan RPC berprestasi tinggi Artikel ini akan memperkenalkan cara menggunakan penyulitan data dan pengesahan identiti.

Perlindungan keselamatan dan pengesahan kebenaran perkhidmatan TP6 Think-Swoole RPC Perlindungan keselamatan dan pengesahan kebenaran perkhidmatan TP6 Think-Swoole RPC Oct 12, 2023 pm 01:15 PM

Perlindungan keselamatan dan pengesahan kebenaran perkhidmatan TP6Think-SwooleRPC Dengan peningkatan pengkomputeran awan dan perkhidmatan mikro, panggilan prosedur jauh (RPC) telah menjadi bahagian yang amat diperlukan dalam kerja harian pembangun. Apabila membangunkan perkhidmatan RPC, perlindungan keselamatan dan pengesahan kebenaran adalah sangat penting untuk memastikan bahawa hanya permintaan yang sah boleh mengakses dan memanggil perkhidmatan tersebut. Artikel ini akan memperkenalkan cara melaksanakan perlindungan keselamatan dan pengesahan kebenaran perkhidmatan RPC dalam rangka kerja TP6Think-Swoole. 1. Konsep asas perkhidmatan RPC

Perkhidmatan RPC TP6 Think-Swoole dan penyepaduan baris gilir mesej dan aplikasi Perkhidmatan RPC TP6 Think-Swoole dan penyepaduan baris gilir mesej dan aplikasi Oct 12, 2023 am 11:37 AM

Penyepaduan dan aplikasi perkhidmatan RPC dan baris gilir mesej TP6Think-Swoole Dalam pembangunan perisian moden, perkhidmatan RPC (RemoteProcedureCall) dan baris gilir mesej adalah cara teknikal yang biasa digunakan untuk melaksanakan panggilan perkhidmatan dan pemprosesan mesej tak segerak dalam sistem yang diedarkan. Mengintegrasikan komponen Think-Swoole dalam rangka kerja TP6 boleh melaksanakan fungsi perkhidmatan RPC dan baris gilir mesej dengan mudah, serta menyediakan contoh kod ringkas untuk difahami dan digunakan oleh pembangun. 1. RPC

Ujian prestasi dan penalaan prestasi perkhidmatan TP6 Think-Swoole RPC Ujian prestasi dan penalaan prestasi perkhidmatan TP6 Think-Swoole RPC Oct 12, 2023 pm 02:19 PM

Ujian prestasi dan penalaan prestasi perkhidmatan TP6Think-SwooleRPC 1. Pengenalan Dengan perkembangan pesat Internet, aplikasi sistem teragih menjadi semakin meluas. Dalam sistem teragih, RPC (Remote Procedure Call) ialah mekanisme komunikasi biasa, yang membolehkan perkhidmatan pada nod berbeza untuk memanggil satu sama lain dan mencapai kerja kerjasama dalam sistem teragih. Dalam rangka kerja TP6, Think-Swoole, sebagai pemandu Swoole berprestasi tinggi, menyediakan sokongan perkhidmatan RPC yang mudah. Artikel ini terutamanya memperkenalkan T

Perkhidmatan RPC TP6 dan kes amalan seni bina perkhidmatan mikro yang dibina oleh Think-Swoole Perkhidmatan RPC TP6 dan kes amalan seni bina perkhidmatan mikro yang dibina oleh Think-Swoole Oct 12, 2023 pm 12:04 PM

Pengenalan kepada kes praktikal perkhidmatan RPC dan seni bina perkhidmatan mikro yang dibina oleh TP6Think-Swoole: Dengan perkembangan pesat Internet dan pengembangan skala perniagaan, seni bina monolitik tradisional tidak lagi dapat memenuhi keperluan senario perniagaan berskala besar. Oleh itu, seni bina perkhidmatan mikro telah wujud. Dalam seni bina perkhidmatan mikro, perkhidmatan RPC (RemoteProcedureCall) adalah cara penting untuk mencapai komunikasi antara perkhidmatan. Melalui perkhidmatan RPC, pelbagai perkhidmatan mikro boleh menghubungi satu sama lain dengan mudah dan cekap. Dalam artikel ini

See all articles