So implementieren Sie die asynchrone Verarbeitung in PHP

小云云
Freigeben: 2023-03-21 20:18:01
Original
2321 Leute haben es durchsucht

In tatsächlichen Produktionsumgebungen wird PHP häufig als Backend-Schnittstellenserver verwendet. Natürlich hat PHP die Vorteile, ein Backend-Server zu sein, zeigt sich jedoch bei der Verarbeitung einiger Ergebnisse, die der Client nicht hat Der Nachteil besteht darin, dass es keinen asynchronen Ausführungsmechanismus gibt. Wenn wir beispielsweise die Leistung des Zugriffs eines bestimmten Clients auf PHP aufzeichnen möchten (einschließlich Startzeit, Endzeit, Ergebnisstatus usw.), möchte der Client natürlich, dass die PHP-Verarbeitung so schnell wie möglich antworten kann. Um die Ergebnisse zu erhalten, und wenn Sie eine herkömmliche Lösung installieren, muss der Client warten, bis PHP die Leistungsaufzeichnung abgeschlossen hat, bevor er die Ergebnisse erhält. Es ist so, als würden Sie zur Bank gehen, um Ihren aktuellen Kontostand zu überprüfen, und der Kassierer kommt zu Ihnen und plaudert eine Weile mit anderen Leuten, aber das Ergebnis ist dasselbe, wenn er kommt, um es Ihnen zu sagen.

Daher benötigen Sie oft ein PHP, das asynchrone Vorgänge ausführen kann.

Wie können wir also eine asynchrone Implementierung erreichen?

Eine Lösung besteht darin, PHP-Systemaufrufe zu verwenden, um einen neuen Prozess zu starten.

php bietet die Funktion fsockopen. Die Funktion dieser Funktion besteht darin, eine Socket-Verbindung zum angegebenen Host zu initialisieren. Natürlich können Sie es über stream_set_blocking() in den nicht blockierenden Modus konvertieren. Das ist der Schlüssel. Daher besteht die Idee darin, einen nicht blockierenden Socket zu öffnen, um eine Verbindung zum lokalen Computer herzustellen, und der lokale Computer führt nach dem Empfang eine zeitaufwändige Verarbeitung durch.

Ein Verarbeitungscode ähnlich diesem (Datei posttest.php):

$fp = fsockopen($php_Path,80);
if (!$fp) {
    LMLog::error("fsockopen:err" );
} else {
    $out = "GET /album/action/album_write_friends_thread_record.php?key=&u=   HTTP/1.1\r\n";
    $out .= "Host: ".$php_Path."\r\n";
    $out .= "Connection: Close\r\n\r\n";
    stream_set_blocking($fp,true);
    stream_set_timeout($fp,1);
    fwrite($fp, $out);
    usleep(1000);
    fclose($fp);
}
Nach dem Login kopieren

Hier ist usleep(1000) sehr wichtig, es kann sicherstellen, dass diese Anfrage gesendet werden kann.

Wir betrachten die Verarbeitungscodelogik (Datei album_write_friends_thread_record.php):

<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2016-09-23
 * Time: 09:26
 */
/**
 * 客户端调用服务器接口页面
 * user: guwen
 */
sleep(20);// 睡眠20s
?>实际上,我们服务器在执行fsockopen 那段程序时,就不会再等20s之后才能返回给客户端,而是发出这个请求之后,即返回客户端,销毁进程,
而把剩余的工作交由其他进程慢慢做去,这就实现了php的异步。
Nach dem Login kopieren

Verwandte Empfehlungen:

PHP asynchron Umsetzungsplan bearbeiten

Das obige ist der detaillierte Inhalt vonSo implementieren Sie die asynchrone Verarbeitung in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage