Asynchrone Task „Think-Swoole Task'.
Nutzungsszenarien
Wenn Sie zeitaufwändige Vorgänge im Serverprogramm ausführen müssen, z. B. das Senden von Broadcasts an einen Chat-Server und das Senden von E-Mails an einen Webserver. Wenn Sie diese Funktionen direkt ausführen, wird der aktuelle Prozess blockiert, was dazu führt, dass der Server langsam reagiert. Beispiel: Im Benutzerregistrierungsszenario erfordert die Funktion zum Abschließen der Registrierung und zum Versenden von Aktivierungs-E-Mails die folgenden Schritte:
Der Client übermittelt POST-Daten –> Der Server ruft die Daten ab –> die Datenbank -> Kontoaktivierungs-E-Mail senden-> Zurück zum Client, um zu bestätigen, dass die Registrierung erfolgreich war.
Mit dieser Geschäftslogik gibt es kein Problem, aber da das Senden einer E-Mail ein zeitaufwändiger Vorgang ist (z. B. 2-3 Sekunden) und gleichzeitig die Ausführung des Programms blockiert, bis der Client nach dem Senden einer erfolgreichen Registrierung aufgefordert wird Der Versand ist erfolgreich. Bei diesem Vorgang dauert es schätzungsweise etwa 4 Sekunden von der Übermittlung bis zur endgültigen Benachrichtigung über die erfolgreiche Registrierung. Eine Anfrageantwort dauert 4 Sekunden, was definitiv unangemessen ist!
Die Verwendung der asynchronen Aufgabenzustellung kann das Benutzererlebnis erheblich verbessern. Der allgemeine Prozess ist:
Der Client übermittelt POST-Daten –> Der Server ruft die Registrierung ab und schreibt die Benutzerdaten in die Datenbank. > Kehrt sofort zur Client-Eingabeaufforderung zurück. Registrierung erfolgreich.
Liefern Sie eine Aufgabenaufgabe, wenn die Registrierung erfolgreich ist –> Schließen Sie den zeitaufwändigen Vorgang des Sendens der E-Mail asynchron ab (der Benutzer ist sich dieses Teils der Zeit nicht bewusst, da die Antwort sehr früh an den Client zurückgesendet wurde) .
Schritte zur Verwendung der asynchronen Aufgabe „Task“ von Think-Swoole
Ereignis-Listening-Klasse definieren (php think make:Listener-Klassenname).
Die Ereignisüberwachung von swoole.task ist in der Datei app/event.php definiert.
Holen Sie sich das Swoole/Server-Objekt und rufen Sie die Task-Methode auf (übergeben Sie die soeben im Parameter definierte Abhörklasse).
Definieren Sie den Trigger-Callback-Logikcode in der Handle-Methode der gerade definierten Event-Listening-Klasse.
Rufen Sie die Finish-Methode auf, die die Aufgabe swoole.finish auslöst, nachdem die Aufgabe abgeschlossen ist (wird nur bei Bedarf aufgerufen, nicht erforderlich).
Demonstration
Erstellen Sie zunächst ein E-Mail-Versandereignis im Projektstammverzeichnis:
php think make:listener EmailTask
Definieren Sie dann das erstellte E-Mail-Versandereignis:
app/event.php 'listen' => [ 'AppInit' => [], 'HttpRun' => [], 'HttpEnd' => [], 'LogLevel' => [], 'LogWrite' => [], 'swoole.task' => [ app\listener\EmailTask::class, ], // 'swoole.finish' => [ // app\listener\EmailTaskFinish::class, // ], ],
Der Schlüsselname von swoole.task ist Task. Die Aufgabe ist behoben und kann nicht ausgeführt werden willkürlich benannt werden.
Als nächstes rufen wir die asynchrone Task Task über die Swoole/Server-Klasse im Controller auf, der für die Benutzerregistrierung verantwortlich ist. Natürlich müssen wir zuerst den Logikcode von EmailTask.php verbessern:
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); } }
In der Registrierungsmethode 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(); } } }
Im Registrierungsgeschäft wird nach dem Einfügen in die Datenbank die asynchrone Aufgabe zum Senden von E-Mails aufgerufen. Das Simulieren des E-Mail-Versands in EmailTask.php dauert 3 Sekunden.
Öffnen Sie den Think-Swoole-Dienst, greifen Sie auf die Registrierungsmethode zu und testen Sie, ob die Zeit des E-Mail-Versands in der Benutzerregistrierungsmethode enthalten ist:
Es ist ersichtlich, dass die 3 Sekunden des E-Mail-Versands asynchron sind Der Benutzer nimmt es nicht wahr.
Darüber hinaus gibt es ein swoole.finish-Ereignis, mit dem andere Ereignisse darüber informiert werden, dass die aktuelle asynchrone Aufgabe abgeschlossen wurde. Sie müssen außerdem ein Ereignis erstellen und swoole.finish in app/event.php definieren Beispielcode wurde demonstriert.
Das obige ist der detaillierte Inhalt vonAsynchrone Task „Think-Swoole Task'.. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Leistungsoptimierung und Debugging des TP6Think-SwooleRPC-Dienstes 1. Einführung Mit der rasanten Entwicklung des Internets ist verteiltes Rechnen zu einem unverzichtbaren Bestandteil der modernen Softwareentwicklung geworden. Beim verteilten Rechnen ist RPC (RemoteProcedureCall, Remoteprozeduraufruf) ein häufig verwendeter Kommunikationsmechanismus, über den Methodenaufrufe im gesamten Netzwerk implementiert werden können. Think-Swoole kann als leistungsstarkes PHP-Framework RPC-Dienste gut unterstützen. Aber

TP6 (ThinkPHP6) ist ein auf PHP basierendes Open-Source-Framework, das sich durch hohe Skalierbarkeit und verteilte Bereitstellung auszeichnet. In diesem Artikel wird erläutert, wie Sie TP6 mit der Swoole-Erweiterung verwenden, um einen hoch skalierbaren RPC-Dienst zu erstellen, und es werden spezifische Codebeispiele gegeben. Zuerst müssen wir die Erweiterungen TP6 und Swoole installieren. Führen Sie den folgenden Befehl in der Befehlszeile aus: Composerrequiretopthink/thinkpeclinstallswo

Datenverschlüsselungs- und Identitätsauthentifizierungsmechanismus des TP6Think-SwooleRPC-Dienstes Mit der rasanten Entwicklung des Internets müssen immer mehr Anwendungen Remoteaufrufe durchführen, um Dateninteraktionen und Funktionsaufrufe zwischen verschiedenen Modulen zu realisieren. In diesem Zusammenhang hat sich RPC (RemoteProcedureCall) zu einer wichtigen Kommunikationsmethode entwickelt. Das TP6Think-Swoole-Framework kann leistungsstarke RPC-Dienste implementieren. In diesem Artikel wird die Verwendung von Datenverschlüsselung und Identitätsauthentifizierung vorgestellt.

Hochgradig gleichzeitige Anforderungsverarbeitung und Planung des TP6Think-SwooleRPC-Dienstes Mit der kontinuierlichen Entwicklung der Internettechnologie ist die gleichzeitige Anforderungsverarbeitung und Planung von Netzwerkanwendungen zu einer wichtigen Herausforderung geworden. Im TP6-Framework kann die Think-Swoole-Erweiterung verwendet werden, um die Anforderungsverarbeitung mit hoher Parallelität und die Planung des RPC-Dienstes (RemoteProcedureCall) zu implementieren. In diesem Artikel wird erläutert, wie Sie einen Think-Swoole-basierten RPC-Dienst im TP6-Framework erstellen und bereitstellen

Integration und Anwendung des RPC-Dienstes und der Nachrichtenwarteschlange von TP6Think-Swoole In der modernen Softwareentwicklung sind RPC-Dienst (RemoteProcedureCall) und Nachrichtenwarteschlange gängige technische Mittel zur Implementierung von Dienstaufrufen und asynchroner Nachrichtenverarbeitung in verteilten Systemen. Durch die Integration von Think-Swoole-Komponenten in das TP6-Framework können die Funktionen von RPC-Diensten und Nachrichtenwarteschlangen einfach implementiert werden, und es werden prägnante Codebeispiele bereitgestellt, die Entwickler verstehen und anwenden können. 1. RPC

Sicherheitsschutz und Autorisierungsüberprüfung des TP6Think-SwooleRPC-Dienstes Mit dem Aufkommen von Cloud Computing und Microservices ist Remote Procedure Call (RPC) zu einem unverzichtbaren Bestandteil der täglichen Arbeit von Entwicklern geworden. Bei der Entwicklung von RPC-Diensten sind Sicherheitsschutz und Autorisierungsüberprüfung sehr wichtig, um sicherzustellen, dass nur legitime Anfragen auf den Dienst zugreifen und ihn aufrufen können. In diesem Artikel wird erläutert, wie der Sicherheitsschutz und die Autorisierungsüberprüfung von RPC-Diensten im TP6Think-Swoole-Framework implementiert werden. 1. Grundkonzepte von RPC-Diensten

Leistungstests und Leistungsoptimierung des TP6Think-SwooleRPC-Dienstes 1. Einführung Mit der rasanten Entwicklung des Internets wird die Anwendung verteilter Systeme immer weiter verbreitet. In verteilten Systemen ist RPC (Remote Procedure Call) ein allgemeiner Kommunikationsmechanismus, der es Diensten auf verschiedenen Knoten ermöglicht, sich gegenseitig anzurufen und in verteilten Systemen eine Zusammenarbeit zu erreichen. Im TP6-Framework bietet Think-Swoole als leistungsstarker Swoole-Treiber praktische RPC-Serviceunterstützung. In diesem Artikel wird hauptsächlich T. vorgestellt

Einführung in den praktischen Fall der von TP6Think-Swoole erstellten RPC-Service- und Microservice-Architektur: Mit der schnellen Entwicklung des Internets und der Ausweitung des Geschäftsumfangs kann die traditionelle monolithische Architektur die Anforderungen großer Geschäftsszenarien nicht mehr erfüllen. Daher entstand die Microservice-Architektur. In der Microservice-Architektur ist der RPC-Dienst (RemoteProcedureCall) eine wichtige Möglichkeit, die Kommunikation zwischen Diensten zu erreichen. Über RPC-Dienste können sich verschiedene Microservices bequem und effizient gegenseitig anrufen. In diesem Artikel
