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

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

藏色散人
藏色散人nach vorne
2019-12-05 13:32:513298Durchsuche

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">

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;));

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);
?>

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);
}
    
?>

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);    // 设置执行不超时

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:csdn.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen