HTTP-запрос медленный в первый раз и при ожидании слишком долго - PullRequest
4 голосов
/ 01 марта 2011

Я использую Apache DefaultHttpClient в приложении для Android, чтобы отправить запрос на получение веб-серверу (URL не имеет значения, такое явление наблюдается на разных серверах / сайтах).Первый запрос с использованием HTC Desire с сетью 3G занимает несколько секунд (> 4 с), последующие - примерно 0,5 с.Если я подожду более ~ 15 секунд, прежде чем сделать следующий запрос, этому следующему запросу снова потребуется несколько секунд.Запрос использует HTTP1.1, серверное время не проблема.Поиск DNS также не является проблемой, так как я пытался использовать IP-адрес.

Для меня это выглядит как установка тайм-аута соединения в платформе Apache или моего устройства HTC, переводящего сетевой интерфейс в спящий режим (еслиделает это вообще).

Кодирование довольно простое, оно выглядит так:

HttpGet get = new HttpGet(uri);
long startTimeMillisRequest = System.currentTimeMillis();
HttpResponse response = client.execute(get);
long endTimeMillisRequest = System.currentTimeMillis();

Кто-нибудь имеет ключ к пониманию причины или испытывает то же самое?Я уже положил это в AsyncTask, но все же я хотел бы знать, почему это так медленно.

Спасибо, Мартин

1 Ответ

2 голосов
/ 01 марта 2011

Здесь есть несколько вариантов:

  • Keepalive: Возможно, дорого установить первоначальное TCP-соединение, а затем повторно использовать tcp-соединение для последующих http-запросов. Это объясняет разрыв соединения tcp через ~ 10-15 секунд, заставляя вас повторно инициировать их

  • Срок действия кэша DNS - очень маловероятно, поскольку речь идет о секундах, а не минутах.

Лучше всего было бы настроить tcpdump и перехватывать пакеты. Вы можете сделать это, перехватывая входящие пакеты на вашем сервере и просматривая поток tcp.

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