Artikel ini akan memperkenalkan kepada anda cara PHP menggunakan curl concurrency untuk mengurangkan masa capaian bahagian belakang Ia juga menggunakan contoh untuk membandingkan dan menganalisis masa berjalan program sebelum dan selepas curl menggunakan akses serentak. Ia mempunyai nilai rujukan tertentu Rakan-rakan yang memerlukan boleh merujuk kepadanya.
Dalam program harian kami, tidak dapat dielakkan untuk mengakses beberapa antara muka pada masa yang sama Apabila kami biasanya menggunakan curl untuk mengakses, ia biasanya akses tunggal dan berurutan terdapat 3 antara muka, setiap antara muka mengambil masa 500 milisaat, jadi tiga antara muka kami akan mengambil masa 1500 milisaat Masalah ini terlalu sakit kepala dan serius menjejaskan kelajuan akses halaman. Hari ini saya akan bercakap secara ringkas tentang penggunaan curl concurrency untuk meningkatkan kelajuan akses halaman,
1 Kaedah akses curl lama dan statistik yang memakan masa
<?php function curl_fetch($url, $timeout=3){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $data = curl_exec($ch); $errno = curl_errno($ch); if ($errno>0) { $data = false; } curl_close($ch); return $data; } function microtime_float() { list($usec, $sec) = explode(" ", microtime()); return ((float)$usec + (float)$sec); } $url_arr=array( "taobao"=>"http://www.taobao.com", "sohu"=>"http://www.sohu.com", "sina"=>"http://www.sina.com.cn", ); $time_start = microtime_float(); $data=array(); foreach ($url_arr as $key=>$val) { $data[$key]=curl_fetch($val); } $time_end = microtime_float(); $time = $time_end - $time_start; echo "耗时:{$time}"; ?>
. Memakan masa: 0.614 saat
2. Kaedah akses serentak Curl dan statistik memakan masa
<?php function curl_multi_fetch($urlarr=array()){ $result=$res=$ch=array(); $nch = 0; $mh = curl_multi_init(); foreach ($urlarr as $nk => $url) { $timeout=2; $ch[$nch] = curl_init(); curl_setopt_array($ch[$nch], array( CURLOPT_URL => $url, CURLOPT_HEADER => false, CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => $timeout, )); curl_multi_add_handle($mh, $ch[$nch]); ++$nch; } /* wait for performing request */ do { $mrc = curl_multi_exec($mh, $running); } while (CURLM_CALL_MULTI_PERFORM == $mrc); while ($running && $mrc == CURLM_OK) { // wait for network if (curl_multi_select($mh, 0.5) > -1) { // pull in new data; do { $mrc = curl_multi_exec($mh, $running); } while (CURLM_CALL_MULTI_PERFORM == $mrc); } } if ($mrc != CURLM_OK) { error_log("CURL Data Error"); } /* get data */ $nch = 0; foreach ($urlarr as $moudle=>$node) { if (($err = curl_error($ch[$nch])) == '') { $res[$nch]=curl_multi_getcontent($ch[$nch]); $result[$moudle]=$res[$nch]; } else { error_log("curl error"); } curl_multi_remove_handle($mh,$ch[$nch]); curl_close($ch[$nch]); ++$nch; } curl_multi_close($mh); return $result; } $url_arr=array( "taobao"=>"http://www.taobao.com", "sohu"=>"http://www.sohu.com", "sina"=>"http://www.sina.com.cn", ); function microtime_float() { list($usec, $sec) = explode(" ", microtime()); return ((float)$usec + (float)$sec); } $time_start = microtime_float(); $data=curl_multi_fetch($url_arr); $time_end = microtime_float(); $time = $time_end - $time_start; echo "耗时:{$time}"; ?>
Memakan masa: 0.316 >s
Masa untuk mengakses antara muka bahagian belakang untuk keseluruhan halaman Handsome Bar disimpan separuh3 parameter berkaitan curl
curl_close — Tutup sesi cURL curl_copy_handle — Salin pemegang cURL bersama semua pilihannya
curl_errno — Kembalikan nombor ralat terakhir
curl_error — Kembalikan rentetan yang mengandungi ralat terakhir untuk sesi semasa
curl_exec — Lakukan sesi cURL
curl_getinfo — Dapatkan maklumat mengenai pemindahan tertentu
curl_init — Mulakan sesi cURL
curl_multi_add_handle — Tambah pemegang cURL biasa pada pemegang berbilang cURL
curl_multi_close — Tutup set cURL mengendalikan
curl_multi_exec — Jalankan sub-sambungan pemegang cURL semasa
curl_multi_getcontent — Kembalikan kandungan pemegang cURL jika CURLOPT_RETURNTRANSFER ditetapkan
curl_multi_info_read — Dapatkan maklumat tentang pemindahan semasa —turn_multi_init Recurl_
pemegang berbilang cURL baharu
curl_multi_remove_handle — Keluarkan pemegang berbilang daripada set pemegang cURL
curl_multi_select — Tunggu aktiviti pada sebarang sambungan curl_multi
curl_setopt_array — Tetapkan berbilang pilihan untuk pemindahan cURL
Set curl_setopt pilihan untuk pemindahan cURL
curl_version — Mendapat maklumat versi cURL
Tutorial Video PHP"