So implementieren Sie den asynchronen Aufruf von Multithreads in PHP

黄舟
Freigeben: 2023-03-17 11:16:01
Original
5479 Leute haben es durchsucht

Im vorherigen Artikel haben wir Ihnen die Implementierungsmethode von PHP-Multithreading vorgestellt. Heute werden wir Ihnen die Methode von PHP zur Implementierung von asynchronem Multithreading ausführlich vorstellen Verbessern Sie Ihr Verständnis von PHP-Multithreading weiter!

Zum Beispiel gibt es jetzt ein Szenario, in dem eine Empfehlungs-E-Mail an 1.000 Benutzer gesendet wird. Der Benutzer gibt das E-Mail-Konto ein oder importiert es und übermittelt es zum Senden an den Server Die erste Lösung:

Dieser Code hat eine sehr schlechte Benutzererfahrung und kann in der Praxis nicht verwendet werden. Erstens führt das Senden so vieler E-Mails dazu, dass der Server Überstunden macht. Die lange Wartezeit des Benutzers führt dazu, dass Benutzer zweifeln und das Vertrauen in das Systemprodukt verlieren. Der Benutzer muss jedoch nicht warten, bis alle 1.000 E-Mails gesendet wurden, bevor er die Nachricht erfolgreich sendet. Wir können den Benutzer direkt auffordern, die Nachricht erfolgreich zu senden, nachdem sie im Hintergrund gesendet wurde, und das Hintergrundprogramm dann einzeln senden lassen eins.

<?php
$count=count($emailarr);
for($i=0;$i<$count;$i )
{
sendmail(.....);//发送邮件
}
?>
Nach dem Login kopieren

Die zweite Lösung:

Wir versuchen, die Technologie der „asynchronen Ausführung“ zu verwenden, um den Code auszuführen Durch die stille Ausführung im Hintergrund müssen Benutzer nicht auf die Ausführungsergebnisse des Codes warten. Die Vorteile der Verwendung der asynchronen Ausführung:

1 Beseitigen Sie die Abhängigkeit der Anwendung von einer einzelnen Aufgabe

2. Verbessern Sie die Ausführungseffizienz des Programms

3. Verbesserte Benutzererfahrung in bestimmten Szenarien

5 -Threading, es gibt viele Anfragen, die asynchrone Aufrufe verwenden. Die HTTP-Methode erzielt den Effekt der parallelen Ausführung des Programms. Beachten Sie jedoch, dass der Systemaufwand erheblich erhöht wird, wenn zu viele HTTP-Anfragen gestellt werden.

Benutzererfahrung : Der Benutzer wartet ->Senden abgeschlossen

Dann wird der Briefversand an ein PHP-Programm übergeben, das den Briefversand separat abwickelt. Wenn der Benutzer „Gesendet abgeschlossen“ sieht, wurde der Brief zu diesem Zeitpunkt noch nicht gesendet Das Sendeprogramm arbeitet hart im Hintergrund und sendet jeden Brief einzeln.

Die dritte Methode:

<?php 
$domain="www.***.com"; 
$url="/system_mail.php"; 
$par="email=".implode(&#39;,&#39;,$emailarr)."&........"; 
$header = "POST $url HTTP/1.0rn"; 
$header .= "Content-Type: application/x-www-form-urlencodedrn"; 
$header .= "Content-Length: " . strlen($par) . "rnrn"; 
$fp = @fsockopen ($domain, 80, $errno, $errstr, 30); 
fputs ($fp, $header . $par); 
fclose($fp);
echo &#39;&#39;发送完毕&#39;; 
?> 
system_mail.php 
<?php 
ini_set("ignore_user_abort",true); 
ignore_user_abort(true);//此处的代码需要php.ini开启相关的选项,保证php执行不超时的,不明白,参考我的另一篇文章 “关闭浏览器后,php脚本会不会继续运行” 
//获取email地址,发信,此处为发信代码 
?>
Nach dem Login kopieren
Die Die einfachste Möglichkeit besteht darin, AJAX in den an den Client-Aufruf zurückgegebenen HTML-Code einzubetten oder ein

img-Tag einzubetten, wobei src auf das auszuführende zeitaufwändige Skript verweist. Diese Methode ist die einfachste und schnellste. Der Server muss keine Anrufe tätigen.

Aber der Nachteil ist, dass Ajax im Allgemeinen nach onLoad ausgelöst werden sollte. Das heißt, wenn der Benutzer auf die Seite klickt und sie dann schließt, wird unser Hintergrundskript nicht ausgelöst.

Wenn Sie das img-Tag verwenden, kann diese Methode nicht als asynchrone Ausführung im engeren Sinne bezeichnet werden. Der Browser des Benutzers wartet lange auf den Abschluss der Ausführung des PHP-Skripts, d. h. in der Spalte Status des Browsers des Benutzers wird immer angezeigt, dass es noch geladen wird.
Natürlich können auch andere Methoden mit ähnlichen Prinzipien verwendet werden, wie z. B. Script-Tags usw.

Vierte Methode:

popen()


//Öffnen Sie einen Zeigeprozess Das Rohr des Prozesses, der durch die Ausführung des angegebenen Befehlsbefehls erzeugt wird. Öffnet eine Pipe zu dem Prozess, der durch die Verzweigung der Ausführung des angegebenen Befehls entsteht.

Sie können es also aufrufen, aber seine Ausgabe ignorieren.
resource popen ( string command, string mode );
Nach dem Login kopieren


Diese Methode vermeidet die Mängel der ersten Methode und ist außerdem schnell. Das Problem besteht jedoch darin, dass diese Methode keinen anderen WebService über das HTTP-Protokoll anfordern und nur lokale Skriptdateien ausführen kann. Und es kann nur in eine Richtung geöffnet werden und kann nicht viele Parameter an das aufgerufene Skript übergeben.

Und wenn die Anzahl der Besuche hoch ist, werden viele Prozesse generiert. Wenn Sie externe Ressourcen nutzen, müssen Sie selbst Rücksicht auf die Konkurrenz nehmen.

pclose(popen("/home/xinchen/backend.php &", &#39;r&#39;));
Nach dem Login kopieren

Die fünfte Methode:

CURL verwenden Diese Methode setzt CUROPT_TIMEOUT auf 1 (das Minimum ist 1, drückend). Das heißt, der Client muss mindestens 1 Sekunde warten.

Sechste Methode:

$ch = curl_init();
$curl_opt = array(CURLOPT_URL, &#39;http://www.example.com/backend.php&#39;,
                            CURLOPT_RETURNTRANSFER, 1,
                            CURLOPT_TIMEOUT, 1,);
curl_setopt_array($ch, $curl_opt);
curl_exec($ch);
curl_close($ch);
Nach dem Login kopieren
Verwenden Sie fsockopen

Diese Methode sollte die perfekteste sein, aber der Nachteil ist, dass Sie den HTTP-Header selbst buchstabieren müssen Teil.


Zusammenfassung:

$fp = fsockopen("www.example.com", 80, $errno, $errstr, 30);
if (!$fp) {
    echo "$errstr ($errno)<br />n";
} else {
    $out = "GET /backend.php / HTTP/1.1rn";
    $out .= "Host: www.example.comrn";
    $out .= "Connection: Closernrn";
    fwrite($fp, $out);
    /*忽略执行结果
while (!feof($fp)) {
echo fgets($fp, 128);
}*/
    fclose($fp);
}
Nach dem Login kopieren

Die oben genannten sechs Methoden sind Beispiele für asynchrones Aufruf-Multithreading in PHP. Jede Methode verfügt über folgende Funktionen: Sie können je nach Bedarf die Methode wählen, die zu Ihnen passt!

Verwandte Empfehlungen;

Einführung in drei Methoden der PHP-Multithread-Simulationsimplementierung

Ein Implementierungsbeispiel für PHP-Multithreading


Eine Implementierungsmethode für PHP-Multithreading – Shell


PHP-Multithreading-Kleingehäuse

Das obige ist der detaillierte Inhalt vonSo implementieren Sie den asynchronen Aufruf von Multithreads 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