истекло время чтения сокета - должен ли я перейти на 0 (inifite)

Я загружаю большой файл (скажем, около 100 МБ) и время от времени получаю SocketException: Read timed out.

Я думаю о повышении тайм-аута сокета. На самом деле, я думаю установить время ожидания сокета на 0 (бесконечное), так как в конечном итоге размеры файлов, которые будет загружать мое приложение, могут даже превысить 300 МБ или даже больше 300 МБ. Это хорошая практика?

Что касается времени ожидания сокета, когда на самом деле начинается обратный отсчет времени ожидания? Я имею в виду, когда происходит тайм-аут сокета, означает ли это, что соединение все еще активно, и файл все еще непрерывно загружается, но просто тайм-ауты, потому что тайм-аут сокета настроен? Или обратный отсчет начинается, когда он определяет, что соединение все еще активно, но сервер не отправляет данные; таким образом начинается обратный отсчет и достигнут тайм-аут?

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


person villager    schedule 17.03.2014    source источник


Ответы (1)


Я загружаю большой файл (скажем, около 100 МБ) и время от времени получаю SocketException: время ожидания чтения истекло.

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

Я думаю о повышении тайм-аута сокета.

От чего?

На самом деле, я думаю установить время ожидания сокета на 0 (бесконечное), так как в конечном итоге размеры файлов, которые будет загружать мое приложение, могут даже превысить 300 МБ или даже больше 300 МБ. Это хорошая практика?

Тайм-аут чтения не имеет ничего общего с размером загрузки. Это связано с ожидаемым временем обслуживания запроса. Обычно я рекомендую установить его на удвоение ожидаемого времени обслуживания. В конце концов, цель тайм-аута чтения — сообщить вам, когда одноранговый узел не отвечает.

Что касается времени ожидания сокета, когда на самом деле начинается обратный отсчет времени ожидания?

Когда вы вводите метод чтения.

Я имею в виду, когда происходит тайм-аут сокета, означает ли это, что соединение все еще живо?

Да.

и файл все еще непрерывно загружается

Нет. За время ожидания данные не поступили.

но просто тайм-ауты, потому что тайм-аут сокета настроен?

Время ожидания чтения истекло, потому что (а) вы установили время ожидания чтения и (б) оно истекло. Не переусердствуйте с этим.

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

См. выше.

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

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

person user207421    schedule 17.03.2014