Heim > Backend-Entwicklung > PHP-Tutorial > Vier gängige Arten der asynchronen Ausführung in PHP

Vier gängige Arten der asynchronen Ausführung in PHP

藏色散人
Freigeben: 2023-04-07 22:38:01
nach vorne
3330 Leute haben es durchsucht

Dieser Artikel beschreibt die asynchrone Aufrufmethode von PHP und stellt sie Ihnen als Referenz zur Verfügung.

Der Client und der Server kommunizieren über das HTTP-Protokoll. Der Client initiiert eine Anfrage und der Server Nach Erhalt der Anfrage wird die Verarbeitung durchgeführt und das Verarbeitungsergebnis zurückgegeben.

Manchmal muss der Server einen zeitaufwändigen Vorgang ausführen und das Ergebnis dieses Vorgangs muss nicht an den Client zurückgegeben werden. Da PHP jedoch synchron ausgeführt wird, muss der Client auf die Verarbeitung des Dienstes warten, bevor er mit dem nächsten Schritt fortfahren kann.

Daher eignen sich zeitaufwändige Vorgänge für die asynchrone Ausführung. Nachdem der Server die Anforderung erhalten hat, kehrt er nach der Verarbeitung der vom Client benötigten Daten zurück und führt die zeitaufwändigen Vorgänge dann asynchron auf dem Server aus.

1. Verwenden Sie das Prinzip Ajax und img-Tag

, fügen Sie Ajax-Code oder img-Tag in den vom Server zurückgegebenen HTML-Code ein, und der src von img ist das Programm, das muss ausgeführt werden.

Vorteile: Einfache Implementierung, der Server muss keine Aufrufe durchführen

Nachteile: Während der Ausführung befindet sich der Browser immer im Ladezustand, daher handelt es sich bei dieser Methode nicht um einen echten asynchronen Aufruf .

$.get("doRequest.php", { name: "fdipzone"} );
<img src="doRequest.php?name=fdipzone">
Nach dem Login kopieren

2. Verwenden Sie popen

Verwenden Sie popen, um Befehle auszuführen, Syntax:

// popen — 打开进程文件指针 
resource popen ( string $command
, string $mode
)
pclose(popen(&#39;php /home/fdipzone/doRequest.php &&#39;, &#39;r&#39;));
Nach dem Login kopieren

Vorteile: Schnelle Ausführung

Nachteile:

1). Kann nur lokal ausgeführt werden

2). Eine große Anzahl von Parametern kann nicht übergeben werden

3). 🎜>

3. Verwenden Sie Curl

, um das Timeout von Curl CURLOPT_TIMEOUT auf 1 zu setzen (Minimum ist 1), sodass der Client 1 Sekunde warten muss

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

4. Die Verwendung von fsockopen

fsockopen ist das Beste. Der Nachteil besteht darin, dass Sie den Header-Teil selbst verbinden müssen.

<?php
    
$url
= &#39;http://www.example.com/doRequest.php&#39;;
$param
= array(
  &#39;name&#39;=>&#39;fdipzone&#39;,
  &#39;gender&#39;=>&#39;male&#39;,
  &#39;age&#39;=>30
);
    
doRequest($url, $param);
    
function
doRequest($url, $param=array()){
    
  $urlinfo
= parse_url($url);
    
  $host
= $urlinfo[&#39;host&#39;];
  $path
= $urlinfo[&#39;path&#39;];
  $query
= isset($param)? http_build_query($param) : &#39;&#39;;
    
  $port
= 80;
  $errno
= 0;
  $errstr
= &#39;&#39;;
  $timeout
= 10;
    
  $fp
= fsockopen($host, $port, $errno, $errstr, $timeout);
    
  $out
= "POST ".$path." HTTP/1.1\r\n";
  $out
.= "host:".$host."\r\n";
  $out
.= "content-length:".strlen($query)."\r\n";
  $out
.= "content-type:application/x-www-form-urlencoded\r\n";
  $out
.= "connection:close\r\n\r\n";
  $out
.= $query;
    
  fputs($fp, $out);
  fclose($fp);
}
    
?>
Nach dem Login kopieren

Hinweis: Während des Ausführungsprozesses wird die Client-Verbindung getrennt oder die Verbindung läuft ab, was zu einer unvollständigen Ausführung führen kann. Sie müssen also

ignore_user_abort(true); // 忽略客户端断开
set_time_limit(0);    // 设置执行不超时
Nach dem Login kopieren
hinzufügen. Für weitere PHP-Kenntnisse bitte Besuchen Sie das

PHP-Tutorial!

Das obige ist der detaillierte Inhalt vonVier gängige Arten der asynchronen Ausführung in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:csdn.net
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