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

PHP 實現異步資料調用的四種常用方式詳解

     編輯:PHP 相關知識

為什麼需要異步執行?

HTTP 協議無連接特性導致客戶端需等待服務端處理完成。若任務耗時較長(如發送 1000 封郵件),用戶體驗極差,甚至導致超時。異步執行可讓後台靜默運行,用戶無需等待結果,優勢包括:

  • 擺脫單任務依賴
  • 提高執行效率與擴展性
  • 改善用戶體驗
  • 透過多 HTTP 請求模擬並行(注意過多請求增加系統開銷)

四種常見異步實現方式

1. 客戶端 AJAX / img 標籤

在返回的 HTML 中嵌入 AJAX 或 <img src="backend.php">。最簡單,服務端無需調用。缺點:AJAX 需 onLoad 後觸發,用戶關頁面則不執行;img 標籤會導致瀏覽器長時間 loading,非真正異步。

2. popen() 函數

pclose(popen("/home/xinchen/backend.php &", 'r'));

優點:速度快,避免 AJAX 缺點。缺點:只能執行本地腳本,無法請求遠程 WebService;單向管道,難傳大量參數;高併發產生大量進程,需自行處理資源競爭。

3. cURL 擴展

設置 CURLOPT_TIMEOUT = 1(最小 1 秒),客戶端至少等待 1 秒:

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

4. fsockopen() 函數

手動拼接 HTTP Header,支援 Socket 編程:

$fp = fsockopen('www.example.com', 80, $errno, $errstr, 30);
if ($fp) {
    $out = "GET /backend.php HTTP/1.1\r\n";
    $out .= "Host: www.example.com\r\n";
    $out .= "Connection: Close\r\n\r\n";
    fwrite($fp, $out);
    fclose($fp);
}

優點:最靈活,無額外依賴。缺點:需手動構造 Header,代碼較繁瑣。

關鍵設置:忽略用戶斷開、取消超時

在被異步調用的腳本開頭加入:

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

確保後台任務不因前端斷開或超時而中斷。

您可能感興趣的文章:

  • PHP 實現異步調用方法研究與分享
  • PHP 異步調用 Socket 實現代碼
  • 解決 PHP 使用異步調用獲取資料時出現錯誤
  • PHP 異步調用方法實現示例
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved