PHP 프레임워크 ThinkPHP Think-Swoole Task 비동기 작업

Think-Swoole Task 비동기 작업

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

Think-Swoole Task 비동기 작업

사용 시나리오

방송을 채팅 서버로 보내고, 이메일을 웹 서버로 보내는 등 시간이 많이 걸리는 작업을 서버 프로그램에서 수행해야 하는 경우. 이러한 기능을 직접 실행하면 현재 프로세스가 차단되어 서버의 응답 속도가 느려집니다. 예: 사용자 등록 시나리오에서 등록을 완료하고 활성화 이메일을 보내는 기능에는 다음 단계가 필요합니다.

클라이언트가 POST 데이터를 제출합니다. -> 서버가 데이터를 얻습니다. 데이터베이스 -> 계정 활성화 이메일 보내기 -> 클라이언트로 돌아가서 등록이 성공했다는 메시지를 표시합니다.

이 비즈니스 로직에는 문제가 없지만 이메일을 보내는 것은 시간이 많이 걸리는 작업(예: 2-3초)이고 프로그램 실행을 동기적으로 차단하므로 클라이언트가 등록 성공 메시지를 받을 때까지 전송이 성공했습니다. 이 과정에서 제출부터 최종 등록 성공 알림까지 약 4초 정도 소요되는 것으로 추정되는데, 이는 확실히 무리한 일입니다!

이제 작업 비동기 작업 전달을 사용하면 일반적인 프로세스는 다음과 같습니다.

클라이언트가 POST 데이터를 제출합니다. -> 서버가 데이터를 얻습니다. -> 등록을 완료하고 사용자 데이터를 데이터베이스에 씁니다. > 즉시 클라이언트 프롬프트 등록 성공으로 돌아갑니다.

등록 성공 시 작업 전달 -> 시간이 많이 소요되는 이메일 전송 작업을 비동기식으로 완료합니다(응답이 클라이언트에 매우 일찍 반환되었기 때문에 사용자는 이 부분을 알지 못합니다).

Think-Swoole의 Task 비동기 작업을 사용하는 방법에 대한 단계

이벤트 청취 클래스를 정의합니다(php think make:listener 클래스 이름).

swoole.task의 이벤트 모니터링은 app/event.php 파일에 정의되어 있습니다.

Swoole/Server 개체를 가져오고 작업 메서드를 호출합니다(매개변수에 방금 정의한 청취 클래스 전달).

방금 정의한 이벤트 리스닝 클래스의 핸들 메소드에 트리거 콜백 로직 코드를 정의하세요.

작업이 완료된 후 작업 swoole.finish를 트리거하는 완료 메서드를 호출합니다(필요할 때만 호출되며 필수는 아닙니다).

Demonstration

먼저 프로젝트 루트 디렉터리에 이메일 전송 이벤트를 만듭니다.

php think make:listener EmailTask
로그인 후 복사

그런 다음 생성된 이메일 전송 이벤트를 정의합니다.

app/event.php
'listen'    => [
    'AppInit'  => [],
    'HttpRun'  => [],
    'HttpEnd'  => [],
    'LogLevel' => [],
    'LogWrite' => [],
    'swoole.task' => [
        app\listener\EmailTask::class,
    ],
//  'swoole.finish' => [
//      app\listener\EmailTaskFinish::class,
//  ],
],
로그인 후 복사

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);
    }
}
로그인 후 복사

등록 방법 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();
        }
    }
}
로그인 후 복사

등록 사업에서 데이터베이스에 삽입한 후 이메일 전송이라는 비동기 작업이 호출됩니다. EmailTask.php에서 이메일 전송을 시뮬레이션하는 데 3초가 걸립니다.

Think-Swoole 서비스를 열고 등록 방법에 접속하여 사용자 등록 방법에 이메일 전송 시간이 포함되어 있는지 테스트합니다.

Think-Swoole Task 비동기 작업

이메일 전송의 3초가 비동기식임을 알 수 있으며, 사용자는 그것을 인식하지 못합니다.

또한 현재 비동기 작업이 완료되었음을 다른 이벤트에 알리는 데 사용되는 swoole.finish 이벤트도 있으며 app/event.php에서 swoole.finish를 정의해야 합니다. 샘플 코드가 시연되었습니다.

위 내용은 Think-Swoole Task 비동기 작업의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

TP6 Think-Swoole RPC 서비스 성능 최적화 및 디버깅 TP6 Think-Swoole RPC 서비스 성능 최적화 및 디버깅 Oct 12, 2023 am 11:16 AM

TP6Think-SwooleRPC 서비스의 성능 최적화 및 디버깅 1. 서론 인터넷의 급속한 발전으로 인해 분산 컴퓨팅은 현대 소프트웨어 개발에서 없어서는 안 될 부분이 되었습니다. 분산 컴퓨팅에서 RPC(RemoteProcedureCall, 원격 프로시저 호출)는 네트워크를 통한 메서드 호출을 구현할 수 있는 일반적으로 사용되는 통신 메커니즘입니다. 고성능 PHP 프레임워크인 Think-Swoole은 RPC 서비스를 잘 지원할 수 있습니다. 하지만

TP6 Think-Swoole RPC 서비스의 높은 확장성과 분산 배포 TP6 Think-Swoole RPC 서비스의 높은 확장성과 분산 배포 Oct 12, 2023 am 11:07 AM

TP6(ThinkPHP6)는 PHP 기반의 오픈소스 프레임워크로 높은 확장성과 분산 배포라는 특징을 가지고 있습니다. 이 기사에서는 Swoole 확장과 함께 TP6을 사용하여 확장성이 뛰어난 RPC 서비스를 구축하는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 먼저 TP6 및 Swoole 확장을 설치해야 합니다. 명령줄에서 다음 명령을 실행합니다: Composerrequiretopthink/thinkpeclinstallswo

TP6 Think-Swoole RPC 서비스의 동시 요청 처리 및 스케줄링 TP6 Think-Swoole RPC 서비스의 동시 요청 처리 및 스케줄링 Oct 12, 2023 pm 12:33 PM

TP6Think-SwooleRPC 서비스의 동시 요청 처리 및 스케줄링 인터넷 기술의 지속적인 발전으로 인해 네트워크 애플리케이션의 동시 요청 처리 및 스케줄링이 중요한 과제가 되었습니다. TP6 프레임워크에서는 Think-Swoole 확장을 사용하여 RPC(RemoteProcedureCall) 서비스의 높은 동시성 요청 처리 및 예약을 구현할 수 있습니다. 이 기사에서는 TP6 프레임워크에서 Think-Swoole 기반 RPC 서비스를 구축하는 방법을 소개하고 다음을 제공합니다.

TP6 Think-Swoole RPC 서비스의 데이터 암호화 및 신원 인증 메커니즘 TP6 Think-Swoole RPC 서비스의 데이터 암호화 및 신원 인증 메커니즘 Oct 12, 2023 am 11:29 AM

TP6Think-SwooleRPC 서비스의 데이터 암호화 및 신원 인증 메커니즘 인터넷의 급속한 발전으로 인해 서로 다른 모듈 간의 데이터 상호 작용 및 기능 호출을 실현하기 위해 원격 호출을 수행해야 하는 응용 프로그램이 점점 더 많아지고 있습니다. 이러한 맥락에서 RPC(RemoteProcedureCall)는 중요한 통신 방법이 되었습니다. TP6Think-Swoole 프레임워크는 고성능 RPC 서비스를 구현할 수 있습니다. 이 기사에서는 데이터 암호화 및 신원 인증을 사용하는 방법을 소개합니다.

TP6 Think-Swoole RPC 서비스의 보안 보호 및 인증 검증 TP6 Think-Swoole RPC 서비스의 보안 보호 및 인증 검증 Oct 12, 2023 pm 01:15 PM

TP6Think-SwooleRPC 서비스의 보안 보호 및 권한 검증 클라우드 컴퓨팅과 마이크로서비스의 등장으로 RPC(원격 프로시저 호출)는 개발자의 일상 업무에서 없어서는 안 될 부분이 되었습니다. RPC 서비스를 개발할 때 합법적인 요청만 서비스에 액세스하고 호출할 수 있도록 보안 보호 및 권한 확인이 매우 중요합니다. 이 기사에서는 TP6Think-Swoole 프레임워크에서 RPC 서비스의 보안 보호 및 권한 확인을 구현하는 방법을 소개합니다. 1. RPC 서비스의 기본 개념

TP6 Think-Swoole의 RPC 서비스와 메시지 큐 통합 및 애플리케이션 TP6 Think-Swoole의 RPC 서비스와 메시지 큐 통합 및 애플리케이션 Oct 12, 2023 am 11:37 AM

TP6Think-Swoole의 RPC 서비스 및 메시지 큐 통합 및 적용 현대 소프트웨어 개발에서 RPC 서비스(RemoteProcedureCall) 및 메시지 큐는 분산 시스템에서 서비스 호출 및 비동기 메시지 처리를 구현하는 데 사용되는 일반적인 기술 수단입니다. Think-Swoole 구성 요소를 TP6 프레임워크에 통합하면 RPC 서비스 및 메시지 대기열의 기능을 쉽게 구현할 수 있으며 개발자가 이해하고 적용할 수 있는 간결한 코드 예제를 제공합니다. 1. RPC

TP6 Think-Swoole RPC 서비스 성능 테스트 및 성능 튜닝 TP6 Think-Swoole RPC 서비스 성능 테스트 및 성능 튜닝 Oct 12, 2023 pm 02:19 PM

TP6Think-SwooleRPC 서비스의 성능 테스트 및 성능 튜닝 1. 서론 인터넷의 급속한 발전과 함께 분산 시스템의 적용이 점점 더 광범위해지고 있습니다. 분산 시스템에서 RPC(원격 프로시저 호출)는 서로 다른 노드의 서비스가 서로 호출하고 분산 시스템에서 공동 작업을 수행할 수 있도록 하는 일반적인 통신 메커니즘입니다. TP6 프레임워크에서 Think-Swoole은 고성능 Swoole 드라이버로서 편리한 RPC 서비스 지원을 제공합니다. 이 글에서는 주로 T를 소개합니다.

Think-Swoole에서 구축한 TP6 RPC 서비스 및 마이크로서비스 아키텍처 실습 사례 Think-Swoole에서 구축한 TP6 RPC 서비스 및 마이크로서비스 아키텍처 실습 사례 Oct 12, 2023 pm 12:04 PM

TP6Think-Swoole이 구축한 RPC 서비스 및 마이크로서비스 아키텍처의 실제 사례 소개: 인터넷의 급속한 발전과 비즈니스 규모의 확장으로 인해 기존의 모놀리식 아키텍처는 더 이상 대규모 비즈니스 시나리오의 요구를 충족할 수 없습니다. 그래서 마이크로서비스 아키텍처가 탄생했습니다. 마이크로서비스 아키텍처에서 RPC(RemoteProcedureCall) 서비스는 서비스 간 통신을 달성하는 중요한 방법입니다. RPC 서비스를 통해 다양한 마이크로서비스가 서로 편리하고 효율적으로 호출할 수 있습니다. 이 기사에서는

See all articles