PHP Curl, похоже, блокирует ответ сервера, что приводит к тайм-аутуPhp

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 PHP Curl, похоже, блокирует ответ сервера, что приводит к тайм-ауту

Сообщение Anonymous »

Я весь день гонялся за этим. У меня есть экземпляр Adobe Commerce (ранее Magento 2), работающий на сервере AWS. Я использую адаптер Curl Adobe Commerce для межсерверного вызова внешнего API. Обычно этот вызов выполняется без проблем и ответ обрабатывается правильно.

Код: Выделить всё

                $curl = $this->curlFactory->create();
$curl->setConfig(
[
CURLOPT_TIMEOUT => 30,
CURLOPT_USERAGENT => $this->getUserAgent(),
CURLOPT_SSL_VERIFYHOST => 0,
]
);
$curl->write('POST', $url, '1.1', $this->getHeaders($payload), $payload);
$curlResponse = $curl->read();

$statusCode = $curl->getInfo(CURLINFO_HTTP_CODE);
$headerLength = $curl->getInfo(CURLINFO_HEADER_SIZE);

$curl->close();
Однако я выявил случаи, когда чтение ответа от сервера приводило к ошибке тайм-аута. У меня есть доступ к серверу, который отправляет ответ, и я подтвердил, что он действительно отправляет ответ. И после использования tcpdump на клиентском сервере я убедился, что пакеты принимаются. Но вот в чем дело: пакеты не принимаются до тех пор, пока не истечет время ожидания функции $curl->read(). Похоже, что запрос $curl->read() блокирует входящие TCP-пакеты, и я не могу понять, почему.
Вот считывание соответствующих строк из tcpdump когда тайм-аут установлен на 30 секунд

Код: Выделить всё

22:21:10.658883 [redacted] Flags [.], ack 1506, win 497, length 0
22:21:41.091462 [redacted] Flags [P.], seq 4531:7193, ack 1506, win 501, length 2662
Обратите внимание на разрыв между пакетами почти ровно в 30 секунд. Когда я изменил таймаут на 20 секунд, я получил следующее:

Код: Выделить всё

22:23:26.620425 [redacted] Flags [.], ack 1506, win 497, length 0
22:23:46.340089 [redacted] Flags [P.], seq 1506:1530, ack 4531, win 457, length 24
Опять же, обратите внимание, что промежуток между пакетами составляет почти ровно 20 секунд. Просто ради интереса, вот что произошло, когда я установил тайм-аут на 17 секунд:

Код: Выделить всё

22:27:54.870698 [redacted] Flags [.], ack 1506, win 495, length 0
22:28:11.739022 [redacted] Flags [P.], seq 1506:1530, ack 4531, win 457, length 24
Бум! 17 секунд почти на носу.
Мне кажется, что пока адаптер Curl пытается прочитать ответ от сервера, он фактически блокирует получение ответа сервера. Это происходит не при каждом запросе. Это происходит с перерывами, но его можно воспроизвести после нескольких попыток.
Есть ли у кого-нибудь какие-нибудь советы о том, как решить эту проблему? Спасибо!
Я попытался отправить запрос на скручивание с помощью адаптера Curl Adobe Commerce. Я ожидал получить ответ от сервера. Вместо этого ответ от сервера задерживался до тех пор, пока не истечет время ожидания функции $curl->read(), а затем был получен немедленно.

Подробнее здесь: https://stackoverflow.com/questions/787 ... -a-timeout
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • PHP Curl, похоже, блокирует ответ сервера, что приводит к тайм-ауту
    Anonymous » » в форуме Php
    0 Ответы
    28 Просмотры
    Последнее сообщение Anonymous
  • Вызов WebSocket Recv() не истекает по тайм-ауту, несмотря на установку тайм-аута в Python
    Anonymous » » в форуме Python
    0 Ответы
    25 Просмотры
    Последнее сообщение Anonymous
  • Установка тензорного потока приводит к тайм-ауту
    Anonymous » » в форуме Python
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Ссылка для установки homebrew на Ubuntu по тайм-ауту в Windows
    Гость » » в форуме Javascript
    0 Ответы
    31 Просмотры
    Последнее сообщение Гость
  • Приложение C# MVC net.7 истекает по тайм-ауту
    Anonymous » » в форуме C#
    0 Ответы
    32 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Php»