2013-03-21 9 views
20

Curl_multi_exec'i anlamaya çalışıyorum. El ile örnek bir parça kopyaladım. Merak ediyorum, nasıl çalışıyor? İlk döngü tahmin ettiğim http isteğini gönderir? Ama sonra bir döngü içinde görünürde belgesiz bayraklı işlevleri kullanarak bir döngü içinde bir döngü takip eder ..php curl_multi_exec'i anlama

+ = 70 urls + = paralel olarak indirmek istiyorum.

http://www.php.net/manual/en/function.curl-multi-exec.php

<?php 
... 
$active = null; 
//execute the handles 
do { 
    $mrc = curl_multi_exec($mh, $active); 
} 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); 
    } 
} 
... 
?> 

cevap

20

Bu örneği açıklar iki makaleye keşfedebilirsiniz.

PHP and curl_multi_exec

İlk

, burada yüksek seviyede. İki dış döngü vardır. Birincisi şu anda curl tamponunu temizlemekten sorumlu. İkincisi, daha fazla bilgi için beklemek ve daha sonra bu bilgileri almaktan sorumludur. Bu, I/O’yu engelleme denen şeyin bir örneğidir. Ağ G/Ç işlemi tamamlanana kadar programın geri kalanının yürütülmesini engelleriz. Bu, ağda G/Ç işlemek için genel olarak en çok tercih edilen yol olmasa da, tek iş parçacıklı, eşzamanlı PHP'de gerçekten tek seçenek.

Doing curl_multi_exec the right way

İlk $ mrc değişken ve biz tepki cURL Öntanımlı Sabitler tanımlı bir cURL kod olduğunu öğrenmek manuel. Özünde düzenli bir yanıttır ve diğer PHP işlevlerinde olduğu gibi curl_multi_exec farklı değildir ve yalnızca bittiğinde bir yanıt verir. Yani sadece bir cevap olmalı. Mükemmel bir dünyada bu tek yanıt 0 (sıfır) veya önceden tanımlanmış sabit CURLM_OK'a eşittir.