Разумные значения тайм-аута HTTP POST для использования при программной выдаче запросов?

StackOverflow https://stackoverflow.com/questions/171099

  •  05-07-2019
  •  | 
  •  

Вопрос

При программной выдаче запросов HTTP POST, какие значения тайм-аута были бы разумными?

В моем случае я хочу установить «разумные» значения времени ожидания при выполнении запросов POST в PHP, однако это относится к любому языку.

Мне нужно иметь возможность отправлять набор запросов, каждый на указанный пользователем URL-адрес. Если мне нужно обрабатывать запросы последовательно, а не одновременно, я бы хотел указать разумное время, по истечении которого считается, что запрос истек.

PHP время ожидания сокета по умолчанию составляет 60 секунд. Кажется, что это излишне долгое время ожидания, прежде чем решить, что запрос не будет выполнен.

Поскольку это POST-запросы, они должны выполняться быстро - нет данных для извлечения и возврата, как в случае запроса GET.

Мы должны быть в состоянии предположить, большую часть времени , что отказ выдать ответ на запрос в течение X секунд означает, что хост вряд ли выдаст ответ в течение разумного времени для значений из X значительно менее 60.

Конечно, хостам редко требуется более 60 секунд, чтобы ответить на простой запрос POST. Они даже редко занимают больше 10 секунд? 5 секунд?

Какие могут быть разумные значения для X на практике? Оправдания, сопровождающие предложения, были бы чрезвычайно полезны.

Это было полезно?

Решение

Я бы порекомендовал настроить тест, поскольку слишком много факторов влияют на значение, которое всегда будет разумным.

POST-запрос отправляет данные для обработки. Сколько времени занимает обработка? Это будет зависеть от приложения / данных.

Где хозяин? Пользователь вводит URL, поэтому он будет неизвестен. Мы не можем знать, какой трафик между вашим приложением и хостом. Мы не можем знать нагрузку на сервер хоста.

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

Другие советы

У большинства библиотек есть время ожидания подключения и время чтения. То есть время ожидания между попыткой подключения к удаленному серверу и время ожидания после отправки запроса, чтобы они ожидали ответа.

Если это локальный веб-сервис, я бы установил низкий тайм-аут соединения, 1 секунду или меньше, если ваша библиотека его поддерживает. Если удаленная служба, к которой вы подключаетесь, недоступна, ИМХО, лучше немедленно вернуть ответ пользователю, чем разрешить всем вашим рабочим потокам блокировать эту удаленную службу, вызывая другие восходящие ошибки.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top