Значения времени ожидания DefaultHttpClient и повторные попытки на Android

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

Текущее реализованное решение (не моя реализация) с использованием apache DefaultHttpClient выполняет три повторных попытки вручную с увеличением времени ожидания, как показано здесь:

private static final int[] CONNECTION_TIMEOUTS = new int[] {4000, 5000, 10000};
private static final int[] SOCKET_TIMEOUTS = new int[] {5000, 8000, 15000};

Мне трудно понять, почему текущая реализация использует увеличение времени ожидания и что это пытается решить. Приложение большую часть времени используется, когда телефон подключен к 3G. Есть ли у кого-нибудь объяснение, почему предпочтительнее увеличивать время ожидания с каждой повторной попыткой, или, возможно, у кого-то есть передовой опыт обработки HTTP-запросов в сетях 3G?


person pka    schedule 17.11.2011    source источник


Ответы (2)


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

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

person Felix    schedule 17.11.2011

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

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

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

person vipw    schedule 17.11.2011
comment
Вы бы сказали, что и тайм-аут соединения, и тайм-аут сокета будут меньше с первой попытки? - person pka; 18.11.2011
comment
@pka Я думаю, это зависит от того, ожидаете ли вы, что потеря пакетов в сети или тайм-ауты в httpd будут более вероятными. Я не думаю, что есть какой-то один правильный ответ на этот вопрос. - person vipw; 22.11.2011