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('\think\swoole\Manager'); // $manager -> getServer() -> task(\app\listener\EmailTask::class); return "注册成功!".time(); } } }
등록 사업에서 데이터베이스에 삽입한 후 이메일 전송이라는 비동기 작업이 호출됩니다. EmailTask.php에서 이메일 전송을 시뮬레이션하는 데 3초가 걸립니다.
Think-Swoole 서비스를 열고 등록 방법에 접속하여 사용자 등록 방법에 이메일 전송 시간이 포함되어 있는지 테스트합니다.
이메일 전송의 3초가 비동기식임을 알 수 있으며, 사용자는 그것을 인식하지 못합니다.
또한 현재 비동기 작업이 완료되었음을 다른 이벤트에 알리는 데 사용되는 swoole.finish 이벤트도 있으며 app/event.php에서 swoole.finish를 정의해야 합니다. 샘플 코드가 시연되었습니다.
위 내용은 Think-Swoole Task 비동기 작업의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

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

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

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

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

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

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

뜨거운 주제











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

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

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

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

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

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

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

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