Во-первых, обратите внимание, что при поддержке HTTP клиент и сервер могут в любой момент закрыть незанятое соединение (т. Е. Нет ожидающего ответа, нет незавершенного запроса).В частности, это означает, что клиент не может заставить сервер поддерживать соединение открытым, установив некоторый тайм-аут, все, что делает тайм-аут на стороне клиента, это ограничивает время, в течение которого клиент будет пытаться держать соединение открытым.Сервер может закрыть соединение даже до того, как истечет этот тайм-аут на стороне клиента.
Исходя из этого, не существует общего хорошего значения тайм-аута, но на самом деле он не должен быть.Время ожидания по существу используется для ограничения ресурсов, т. Е. Сколько свободных соединений будет открыто одновременно.Если ваш конкретный вариант использования никогда не будет посещать тот же сайт снова, то использование HTTP keep-alive будет пустой тратой ресурсов.Если вместо этого вы не знаете свой конкретный шаблон использования, вы можете просто установить ограничение на количество открытых соединений, т.е. закрыть самое длинное неиспользуемое соединение, если предел достигнут и требуется новое соединение.В любом случае может иметь смысл установить верхний предел времени ожидания в 10,15 минут, поскольку обычно по истечении этого времени межсетевые экраны и маршрутизаторы NAT между ними будут отказываться от состояния соединения, поэтому простое соединение больше не будет работать для новых запросов.
Но в любом случае вам также необходимо убедиться, что вы обнаружили, закрывает ли сервер соединение, а затем отбросили это соединение из списка соединений, которые можно использовать повторно.И если вы используете HTTP keep-alive, вы также должны знать, что сервер может закрыть соединение в тот самый момент, когда вы пытаетесь отправить новый запрос по существующему соединению, т.е. вам нужно повторить этот запрос, а затем по вновь созданному.подключение.