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

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

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

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

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

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

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

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

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


person Jon Cram    schedule 04.10.2008    source источник
comment
Если вы загружаете файл, особенно с мобильного устройства, это может занять более 60 секунд.   -  person Oscar    schedule 04.07.2011


Ответы (2)


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

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

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

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

person Phoenix    schedule 04.10.2008

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

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

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

person Dave Cheney    schedule 05.10.2008