Времето за изчакване за четене на сокет изтече - трябва ли да отида на 0 (безкраен)

Изтеглям голям файл (да речем около 100mb) и получавам SocketException: Read timed out от време на време.

Мисля да вдигна таймаута на сокета. Всъщност мисля да задам времето за изчакване на сокета на 0 (безкрайно), тъй като в крайна сметка размерите, които файловете, които приложението ми ще изтегля, може дори да надхвърлят 300mb или дори повече от 300mb. Това добра практика ли е?

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

Защото ако случаят е последният, тогава няма да избера да отида до безкрайност, тъй като това ще бъде причинено от това, че сървърът не ми изпраща данни, а не от приложението ми.


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


Отговори (1)


Изтеглям голям файл (да речем около 100mb) и получавам SocketException: Времето за изчакване за четене е изтекло от време на време.

Така че вашето време за изчакване за четене е твърде кратко или партньорът не реагира достатъчно за вашите нужди.

Мисля да вдигна таймаута на сокета.

От това, което?

Всъщност мисля да задам времето за изчакване на сокета на 0 (безкрайно), тъй като в крайна сметка размерите, които файловете, които приложението ми ще изтегля, може дори да надхвърлят 300mb или дори повече от 300mb. Това добра практика ли е?

Изчакването за четене няма нищо общо с размера на изтеглянето. Това е свързано с очакваното време за обслужване на заявка. Обикновено препоръчвам да го настроите да удвои очакваното време за обслужване. Целта на таймаута за четене е да ви каже, когато в крайна сметка партньорът не отговаря.

Относно времето за изчакване на сокета, кога всъщност започва обратното броене?

Когато въведете метода за четене.

Искам да кажа, че когато настъпи таймаут на сокета, това означава ли, че връзката все още е жива

да

и файлът все още се изтегля непрекъснато

Не. Не са пристигнали данни в рамките на периода на изчакване.

но само изчакване, защото е конфигурирано изчакване на сокет?

Времето за изчакване за четене е изтекло, защото (a) сте задали време за изчакване за четене и (b) то е изтекло. Не прекалявайте с това.

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

Виж по-горе.

Защото ако случаят е последният, тогава няма да избера да отида до безкрайност, тъй като това ще бъде причинено от това, че сървърът не ми изпраща данни, а не от приложението ми.

Изчакването за четене е причинено от това, че данните не пристигат в рамките на периода на изчакване, конфигуриран от получаващото приложение. Времето за изчакване може да е твърде кратко, което е грешка на приложението, или може да е, защото партньорът не е изпратил нищо, което е грешка на партньора, или и двете. Не е възможно да се реши априори.

person user207421    schedule 17.03.2014