Panggil berbilang API serentak dalam PHP
P粉917406009
P粉917406009 2023-09-06 16:51:42
0
1
1053

Saya cuba meminta berbilang API secepat mungkin. Jadi saya cuba curl_multi. Tetapi saya mendapat hasil yang lebih perlahan daripada foreach dan file_get_contents. Apa yang saya buat salah?

Gunakan file_get_contents:

<?php
$start = microtime(true);
$urls = array("https://www.example1.com/", "https://www.example2.com/", "https://www.example3.com/");

foreach ($urls as $url) {
    $result = file_get_contents($url);
}

echo microtime(true) - $start;
?>

Gunakan curl_multi:

<?php
$start = microtime(true);
$urls = array("https://www.example1.com/", "https://www.example2.com/", "https://www.example3.com/");
$urls_count = count($urls);
$curl_arr = array();
$master = curl_multi_init();

for($i = 0; $i < $urls_count; $i++)
{
    $curl_arr[$i] = curl_init($urls[$i]);
    curl_setopt($curl_arr[$i], CURLOPT_RETURNTRANSFER, true);
    curl_multi_add_handle($master, $curl_arr[$i]);
}

do {
    curl_multi_exec($master,$running);
} while($running > 0);

for($i = 1; $i < $urls_count; $i++)
{
    $results = curl_multi_getcontent  ( $curl_arr[$i]  );
}

echo microtime(true) - $start;
?>

P粉917406009
P粉917406009

membalas semua(1)
P粉222320176

Masalah ini curl_multi有很大的开销。我假设它必须为每个请求创建一个 shell 进程,然后在该进程中执行curl,最后将内容返回到请求该操作的脚本。 file_get_contents wujud dalam bahasa PHP yang dioptimumkan:

Ini adalah pengalaman pembelajaran yang hebat untuk menggunakan perpustakaan dan ciri asli dalam bahasa tersebut. Selain itu, perpustakaan secara pilihan boleh berbilang benang dan memanfaatkan pemproses berbilang teras, yang mungkin mempercepatkan permintaan. Sesuatu untuk melihat dan menguji diri sendiri.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan