Разумные значения тайм-аута HTTP POST для использования при программной выдаче запросов? - PullRequest
9 голосов
/ 05 октября 2008

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

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

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

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

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

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

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

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

Ответы [ 2 ]

5 голосов
/ 05 октября 2008

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

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

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

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

2 голосов
/ 05 октября 2008

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...