Nasıl bu cURL komut PHP'nin curl_multi fonksiyonu yararlanmak için refactor?

0 Cevap php

Ben bir sığınakta API bağlanmak için benim PHP app cURL kullanıyorum. Ancak, ben sadece son zamanlarda benim cURL bağlantıları parallelizing ve böylece son kullanıcı için aşırı gecikme birkaç ardışık bağlantı sonuçlarını performans değilim olduğunu keşfetti.

Ben önce curl_multi kullanılmaz ettik ve belgeler üzerinden okuduktan sonra bir kayıp tür değilim. Nasıl iyi curl_multi 's paralelizasyon yararlanmak için aşağıdaki kodu refactor?

EDIT: Ben burada kullanılan ediliyor API açık-kaynaklı olduğunu söylemeyi unutmuşum. Bunlar benim kendi vardır Directed Edge PHP bindings. Eğer isterseniz Yani, siz de yardım burada GitHub koduna birleşti ve bir katılımcı olarak listelenmiş olacak olabilir.

Burada istemci kodu ne yapıyorum bir örnek:

 // Get 100 goal recommendations from Directed Edge
  $de = new DirectedEdgeRest();
  $item = "user".$uid;
  $limit = 100;
  $tags = "goal";
  $recommendedGoals = $de->getRecommended($item, $tags, $limit);

  // Get 100 interest recommendations from Directed Edge
  $de = new DirectedEdgeRest();
  $item = "user".$uid;
  $limit = 100;
  $tags = "interest";
  $recommendedInterests = $de->getRecommended($item, $tags, $limit);

Ve burada DirectedEdgeRest() gelen ilgili fonksiyonlar

  /**
   * Returns array of recommended result IDs for an item
   * @param string $item Item, e.g. "Miles%20Davis"
   * @param string $tags Tags as comma delimited string, e.g. "product,page"
   * @param int $limit Limit for max results
   *
   * @return array Recommended result IDs
   */
  public function getRecommended($item, $tags, $limit)
  {
    // Connect to Directed Edge and parse the returned XML
    $targeturl = self::buildURL($item, 'recommended', $tags, $limit, 'true');
    $response = self::getCurlResponse($targeturl);
    $xml = self::parseXML($response);

    // Iterate through the XML and place IDs into an array
    foreach($xml->item->recommended as $recommended) {
      $recommendedResults[] = filter_var($recommended, FILTER_SANITIZE_NUMBER_INT);
    }

    return $recommendedResults;
  }

  /**
   * Builds URL for cURL
   * @param string $item Item, e.g. "Miles%20Davis"
   * @param string $type Type of API request: either "related" or "recommended"
   * @param string $tags Tags as comma delimited string, e.g. "product,page"
   * @param int $limit Limit for max results
   * @param string $exclude "true" if you want to exclude linked, "false" otherwise
   *
   * @return string The target URL
   */
  private function buildURL($item, $type, $tags, $limit, $exclude)
  {
    $targeturl = DE_BASE_URL;
    $targeturl .= $item; // Item
    $targeturl .= "/" . $type; // Type
    $targeturl .= "?tags=" . $tags; // Tags
    $targeturl .= "&maxresults=" . $limit; // Limit
    $targeturl .= "&excludeLinked=" . $exclude; // Exclude
    return $targeturl;
  }

  /**
   * Returns the cURL response given a target URL
   * @param string $targeturl The target URL for cURL
   *
   * @return string cURL Response
   */
  private function getCurlResponse($targeturl)
  {
    $ch = curl_init($targeturl);
    curl_setopt($ch, CURLOPT_POST, FALSE);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    $response = curl_exec($ch);
    curl_close($ch);
    return $response;
  }

0 Cevap