首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 異步執行的四種常用方式總結與最佳實踐

     編輯:PHP 相關知識

異步執行的背景

客戶端與服務端通過 HTTP 通訊,服務端處理耗時操作時,客戶端需同步等待。為避免阻塞,需異步執行:服務端快速響應前端,耗時任務放入後台靜默執行。

四種方案對比

1. AJAX / img 標籤

原理:HTML 中插入 AJAX 或 <img src="doRequest.php">。
優點:實現簡單,服務端無調用。
缺點:瀏覽器長時間 loading,非真正異步。

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

2. popen()

語法:resource popen(string $command, string $mode)
示例:pclose(popen('php /home/fdipzone/doRequest.php &', 'r'));
優點:執行速度快。
缺點:僅限本機;難傳大量參數;高併發產生大量進程。

3. cURL

設置 CURLOPT_TIMEOUT = 1(最小 1 秒):

$ch = curl_init();
$curl_opt = [
    CURLOPT_URL => 'https://www.example.com/doRequest.php',
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_TIMEOUT => 1,
];
curl_setopt_array($ch, $curl_opt);
curl_exec($ch);
curl_close($ch);

4. fsockopen()

手動構造 POST 請求,最靈活:

function doRequest($url, $param = []) {
    $urlinfo = parse_url($url);
    $host = $urlinfo['host'];
    $path = $urlinfo['path'];
    $query = $param ? http_build_query($param) : '';
    $fp = fsockopen($host, 80, $errno, $errstr, 10);
    $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);
}

防止任務中斷的關鍵代碼

在被調用腳本開頭加入:

ignore_user_abort(true); // 忽略客戶端斷開
set_time_limit(0);       // 取消執行超時限制

您可能感興趣的文章:

  • 深入 PHP 異步執行的詳解
  • PHP 異步執行方法,模擬多線程的應用分析
  • PHP AJAX 異步執行不等待執行結果的處理方法
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved