yii\httpclient\CurlTransport::batchSend PHP 메소드

batchSend() 공개 메소드

public batchSend ( array $requests )
$requests array
    public function batchSend(array $requests)
    {
        $curlBatchResource = curl_multi_init();
        $token = '';
        $curlResources = [];
        $responseHeaders = [];
        foreach ($requests as $key => $request) {
            /* @var $request Request */
            $request->beforeSend();
            $curlOptions = $this->prepare($request);
            $curlResource = $this->initCurl($curlOptions);
            $token .= $request->client->createRequestLogToken($request->getMethod(), $curlOptions[CURLOPT_URL], $curlOptions[CURLOPT_HTTPHEADER], $request->getContent()) . "\n\n";
            $responseHeaders[$key] = [];
            $this->setHeaderOutput($curlResource, $responseHeaders[$key]);
            $curlResources[$key] = $curlResource;
            curl_multi_add_handle($curlBatchResource, $curlResource);
        }
        Yii::info($token, __METHOD__);
        Yii::beginProfile($token, __METHOD__);
        try {
            $isRunning = null;
            do {
                // See https://bugs.php.net/bug.php?id=61141
                if (curl_multi_select($curlBatchResource) === -1) {
                    usleep(100);
                }
                do {
                    $curlExecCode = curl_multi_exec($curlBatchResource, $isRunning);
                } while ($curlExecCode === CURLM_CALL_MULTI_PERFORM);
            } while ($isRunning > 0 && $curlExecCode === CURLM_OK);
        } catch (\Exception $e) {
            Yii::endProfile($token, __METHOD__);
            throw new Exception($e->getMessage(), $e->getCode(), $e);
        }
        Yii::endProfile($token, __METHOD__);
        $responseContents = [];
        foreach ($curlResources as $key => $curlResource) {
            $responseContents[$key] = curl_multi_getcontent($curlResource);
            curl_multi_remove_handle($curlBatchResource, $curlResource);
        }
        curl_multi_close($curlBatchResource);
        $responses = [];
        foreach ($requests as $key => $request) {
            $response = $request->client->createResponse($responseContents[$key], $responseHeaders[$key]);
            $request->afterSend($response);
            $responses[$key] = $response;
        }
        return $responses;
    }