2015-08-05 4 views
0

Я тестирую пример curl_multi_await из документа (см. Код ниже), но я не могу получить никакого ответа. Я использую версию 3.8.1 hhvm.пустой ответ при использовании curl_multi_await

У меня была проблема с HH \ Asio \ curl_exec, но она была исправлена ​​путем обновления hhvm, это связано?

<?hh 
    async function curl_exec_await(string $url): Awaitable<string> { 
    $ch = curl_init($url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

    $mh = curl_multi_init(); 
    curl_multi_add_handle($mh, $ch); 
    do { 
    $active = 1; 
    do { 
     $status = curl_multi_exec($mh, $active); 
    } while ($status == CURLM_CALL_MULTI_PERFORM); 
    $select = await curl_multi_await($mh); 
    if ($select == -1) break; 
    } while ($status === CURLM_OK); 
    $content = (string)curl_multi_getcontent($ch); 
    curl_multi_remove_handle($mh, $ch); 
    curl_multi_close($mh); 
    return $content; 
} 

var_dump(curl_exec_await('http://example.com')->getWaitHandle()->join()); 

Этот код печатает пустую строку.

Благодарим за помощь!

ответ

0

Вот пример зафиксируется, если он может помочь кому-то:

<?hh 
    async function curl_exec_await(string $url): Awaitable<string> { 
    $ch = curl_init($url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

    $mh = curl_multi_init(); 
    curl_multi_add_handle($mh, $ch); 

    $active = 0; 
    do { 
     $status = curl_multi_exec($mh, $active); 
     await RescheduleWaitHandle::create(
      RescheduleWaitHandle::QUEUE_DEFAULT, 
      0, 
    ); 
    } while ($status == CURLM_CALL_MULTI_PERFORM || $active > 0); 
    await curl_multi_await($mh); 

    $content = (string)curl_multi_getcontent($ch); 
    curl_multi_remove_handle($mh, $ch); 
    curl_multi_close($mh); 
    return $content; 
} 

var_dump(curl_exec_await('http://example.com')->getWaitHandle()->join()); 
0
  • Функция в документах (которые вы скопировали здесь) является лишь примером. Он доступен в stdlib как \HH\Asio\curl_exec, вы можете просто использовать это вместо своего curl_exec_await. См. the docs.
  • Если эта функция по-прежнему не работает, можете ли вы проверить свои журналы ошибок для вывода любой ошибки и file an issue on GitHub, чтобы мы могли отслеживать проблему? Отслеживание проблем там намного лучше, чем здесь, на SO.