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

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

WBOY
WBOYOriginal
2016-07-29 09:09:16771Durchsuche

Dieser Artikel beschreibt die asynchrone PHP-Aufrufmethode und teilt sie Ihnen als Referenz mit. Der spezifische Inhalt ist wie folgt:
Der Client und der Server kommunizieren über das HTTP-Protokoll. Der Client initiiert eine Anfrage . Nach Erhalt der Anfrage führt der Server die Verarbeitung durch und gibt das Verarbeitungsergebnis zurück.
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 dann zeitaufwändige Vorgänge 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 Quellcode von img ist das Programm, das ausgeführt werden muss.
Vorteile: Einfache Implementierung, der Server muss keine Aufrufe ausführen
Nachteile: Während der Ausführung befindet sich der Browser immer im Ladezustand, daher diese Methode zählt nicht. Echter asynchroner Aufruf.

$.get("doRequest.php", { name: "fdipzone"} );
<img src="doRequest.php&#63;name=fdipzone">

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

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

Vorteile: Schnelle Ausführung
Nachteile:

  • 1). Kann nur auf dieser Maschine ausgeführt werden
  • 2). Sie können nicht viele Parameter übergeben
  • 3). Viele Prozesse werden erstellt, wenn der Datenverkehr hoch ist

3. Verwenden Sie curl
, um das Curl-Timeout CURLOPT_TIMEOUT auf 1 zu setzen (das Minimum ist 1), sodass der Client 1 Sekunde warten muss

<&#63;php 
$ch = curl_init(); 
$curl_opt = array( 
  CURLOPT_URL, 'http://www.example.com/doRequest.php'
  CURLOPT_RETURNTRANSFER,1, 
  CURLOPT_TIMEOUT,1 
); 
curl_setopt_array($ch, $curl_opt); 
curl_exec($ch); 
curl_close($ch); 
&#63;>

4. Verwenden Sie fsockopen
fsockopen ist am besten. Der Nachteil besteht darin, dass Sie den Header-Teil selbst verbinden müssen.

<&#63;php 
   
$url = 'http://www.example.com/doRequest.php'; 
$param = array( 
  'name'=>'fdipzone', 
  'gender'=>'male', 
  'age'=>30 
); 
   
doRequest($url, $param); 
   
function doRequest($url, $param=array()){ 
   
  $urlinfo = parse_url($url); 
   
  $host = $urlinfo['host']; 
  $path = $urlinfo['path']; 
  $query = isset($param)? http_build_query($param) : ''; 
   
  $port = 80; 
  $errno = 0; 
  $errstr = ''; 
  $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 Clientverbindung getrennt oder die Verbindung läuft ab, was zu einer unvollständigen Ausführung führen kann, daher müssen Sie
hinzufügen

ignore_user_abort(true); // 忽略客户端断开 
set_time_limit(0);    // 设置执行不超时

Das Obige ist die detaillierte Einführung der asynchronen Aufrufmethode von PHP. Ich hoffe, dass es für das Lernen aller hilfreich sein wird.

Das Obige stellt vier gängige Methoden der asynchronen PHP-Ausführung vor, einschließlich der relevanten Inhalte. Ich hoffe, dass es für Freunde hilfreich ist, die sich für PHP-Tutorials interessieren.

Stellungnahme:
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