[PHP] php使用curl_multi_exec並行同時執行http請求

當php代碼要對外請求多個接口的時候 , 能夠使用下面的方式並行執行多個請求php

主要是使用curl_multi_exec函數實現nginx

代碼中請求的test.php文件 , 是sleep(10)秒curl

若是按傳統的逐行執行的方式 , 請求兩次這個接口代碼會阻塞20秒的時間 , 如今使用同時並行執行的方式,代碼只會阻塞10秒函數

而且請求也是會同時到達對方接口的url

<?php
// 建立一對cURL資源
$ch1 = curl_init();
$ch2 = curl_init();

// 設置URL和相應的選項
curl_setopt($ch1, CURLOPT_URL, "http://81.69.45.114/test/test.php");
curl_setopt($ch1, CURLOPT_HEADER, 0); 
curl_setopt($ch2, CURLOPT_URL, "http://81.69.45.114/test/test.php");
curl_setopt($ch2, CURLOPT_HEADER, 0); 

// 建立批處理cURL句柄
$mh = curl_multi_init();

// 增長2個句柄
curl_multi_add_handle($mh,$ch1);
curl_multi_add_handle($mh,$ch2);

$active = null;
// 執行批處理句柄
do {
    $mrc = curl_multi_exec($mh, $active);
        var_dump($mrc);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);

while ($active && $mrc == CURLM_OK) {
    if (curl_multi_select($mh) != -1) {
        do {
            $mrc = curl_multi_exec($mh, $active);
        } while ($mrc == CURLM_CALL_MULTI_PERFORM);
    }   
}

// 關閉所有句柄
curl_multi_remove_handle($mh, $ch1);
curl_multi_remove_handle($mh, $ch2);
curl_multi_close($mh);

執行後nginx日誌的展現:spa

 

相關文章
相關標籤/搜索