EDIT: Найденная часть причины – см. Нижнюю.
Я делаю стандартный вызов curl от php. Тем не менее, во время разрешения имени, похоже, происходит зависание. В моем OSX поле namelookup_time длится более 1 секунды для этого и других запросов в одну и ту же подсеть. Ящик Linux в моей подсети, выполняющий тот же запрос, имеет 0,02-секундный ответ на другую подсеть, поэтому это проблема с моим ящиком.
Это проблема, так как наше приложение делает много звонков в эту подсеть для создания страницы, поэтому секунды складываются.
Мой ответ curl_getinfo (URL-адрес вырвался)
array 'url' => string ' < SNIPPED > '... (length=1449) 'content_type' => string 'text/plain; charset=utf-8' (length=25) 'http_code' => int 200 'header_size' => int 227 'request_size' => int 1480 'filetime' => int -1 'ssl_verify_result' => int 0 'redirect_count' => int 0 'total_time' => float 1.165444 'namelookup_time' => float 1.001272 'connect_time' => float 1.017765 'pretransfer_time' => float 1.017781 'size_upload' => float 0 'size_download' => float 92562 'speed_download' => float 79422 'speed_upload' => float 0 'download_content_length' => float 92562 'upload_content_length' => float 0 'starttransfer_time' => float 1.043094 'redirect_time' => float 0 'certinfo' => array empty 'redirect_url' => string '' (length=0)
У меня есть подозрение, что отставание в поиске имени связано с IPv6, поэтому я попробовал следующее:
1) Следуйте указаниям здесь, чтобы отключить Ipv6 на OSX, включая перезагрузку. Я установил все экземпляры IPv6 в НЕАКТИВНО, как предлагаемая статья.
http://community.centrify.com/t5/Express-for-Mac-Tips-and-Tricks/Using-local-domains-with-Centrify-Directcontrol-on-the-Mac/ba-p/3724
Я подтвердил, что мой Mac не поддерживает IPv6 здесь: http://ipv6test.google.com/ .
2) Восстановленный PHP с –disable-ipv6.
php -i показывает: поддержка IPv6 => отключена
хотя в разделе скручивания говорится: «IPv6 => Да», и я не знаю, как хирургически отключить это.
3) Разорвите это до вызова локон:
curl_setopt ($ c, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
К сожалению, ни один из вышеперечисленных шагов не работал – я все еще получаю 1 секунду + время разрешения имен. У кого-нибудь есть предложения по устранению неполадок или, еще лучше, волшебная пуля? 🙂
(Заметьте – я googled и SO'ed этот вопрос, но безрезультатно ..)
Изменить: ответить на вопросы ckhan ниже:
1) Я получаю то же самое 1 сек + namelookup_time, используя IP-адрес или полное доменное имя:
'url' => string 'HTTP://172.19.105.171:8070 <SNIPPED> '... (length=1439) ... 'namelookup_time' => float 1.001309
2) У клиента командной строки нет такой же проблемы:
# url.txt has the same url as the above curl call time cat url.txt |xargs curl <... response output ...> real 0m0.053s user 0m0.009s sys 0m0.008s
3) похоже, что у копания нет проблем с доступом к серверу.
dig 172.19.105.171 ... ;; Query time: 77 msec ...
Моя среда:
PHP 5.3.8
OSX 10.7.3
Частичное решение
Код приложения использует curl_multi_select, который имеет тайм-аут по умолчанию 1 секунду. Изменение этой задержки до 0,00005 секунд делает возврат вызова намного быстрее. Так вот что вызывает задержку. Тем не менее, я еще не знаю, почему это отличается от Linux против OSX или конкретного вкуса php / libcurl, который я создал (5.3.8).
Код приложения PHP использует curl_multi_select, который имеет тайм-аут по умолчанию 1 секунду. Изменение этой задержки до 0,00005 секунд делает возврат вызова намного быстрее. Так вот что вызывает задержку. Тем не менее, я еще не знаю, почему это отличается от Linux против OSX или конкретного вкуса php / libcurl, который я создал (5.3.8).
Я собираюсь открыть другой вопрос SO, чтобы попытаться решить проблему curl_multi_select.