как установить время ожидания с помощью stream_socket_client и STREAM_CLIENT_ASYNC_CONNECT

Я смотрю на это в течение часа или около того без реальной удачи.

Запуск PHP 5.4.45 (не говорите, я знаю).

В производственном экземпляре я вижу, что соединение через сокет периодически прерывается с таймаутом после 5 секунд Мы подтвердили, что API, к которому мы подключаемся, иногда может занять до 10 секунд для генерации ответа на некоторые запросы.

Это не всегда происходит, поэтому мы пытаемся увеличить время ожидания, чтобы помочь отладить проблему.

Сокет определяется как

$address = 'tcp://example.com:80';
$flags = STREAM_CLIENT_ASYNC_CONNECT;
$context = stream_context_create();

$socket = stream_socket_client($address, $errNr, $errMsg, 0, $flags, $context);

Чтобы проверить тайм-аут соединения, я попытался установить следующее безумно малое время ожидания, чтобы я мог вызвать ошибку и убедиться, что увеличение тайм-аута

$address = 'tcp://example.com:80';
$flags = STREAM_CLIENT_ASYNC_CONNECT;
$context = stream_context_create();

$socket = stream_socket_client($address, $errNr, $errMsg, 0, $flags, $context);
stream_set_timeout($this->_socket, 0, 40);

Однако он работает так же, как и раньше, если бы тайм-аут 40 микросекунд был правильно применен, то я ожидал бы, что ошибка тайм-аута сокета будет происходить локально, поскольку API не реагирует на этот таймфрейм.

Может кто-нибудь помочь мне с тем, как правильно настроить время ожидания для асинхронного сокета?

Или, в качестве альтернативы, текущий тайм-аут явно равен 5 секундам, но я не знаю, где default_socket_timeout в настоящее время установлено на 60 в php.ini.

Или, если моя методология тестирования является фиктивной (как я подозреваю, это может быть), пожалуйста, укажите лучший способ проверить эту ошибку тайм-аута.

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …