2009-05-26 2 views
3

Я поддерживаю приложение J2ME, где я нашел HTTP-запрос http://www.google.com в инициализации приложения. Я спросил разработчика, почему есть запрос на google. Он сказал, что таким образом другие запросы, которые приложение делает, будут быстрее.Выполнение запроса http в J2ME

Я удалил этот запрос на google.com, а другие запросы стали медленнее.

Может ли кто-нибудь объяснить, почему это произошло? Как я могу сделать другой запрос быстрее, не выполняя предыдущие запросы?

EDIT:

Создание запроса на Google при инициализации:

  • Первый запрос (после инициализации) = 20сек
  • Повторяя первый запрос = 5сек

Не делая запрос при инициализации:

  • Первый запрос = 40sec
  • Повторяя первый запрос = 5sec
+0

все последующие запросы медленнее? или просто первый? –

+0

отредактировал вопрос с примерным временем каждого запроса –

+0

Почему вы действительно беспокоитесь о том, чтобы сделать первый запрос? – KarlP

ответ

4

На мобильном устройстве, инициирующем подключение к Интернету, потребуется некоторое время, и довольно часто JVM отключит соединение на время работы мидлета (большинство современных подключений тарифицируются за каждый бит - Edge, GPRS, WiFi). Поэтому, если соединение установлено на startApp, вы можете обнаружить, что соединение останется открытым, и все дальнейшие связи не потребуют открытия соединения, а только отправьте данные. Так быстро и надежно!

Это поведение специфично для платформы, MIDP2 не указывает, что это правда (так что Nokias может отличаться от Samsung и т. Д.).

Подключение к 127.0.0.1, вероятно, не обманет JVM, которое может решить, что для этого не требуется открытое соединение GPRS. Снова конкретная платформа.

James

+0

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

+0

Поведение действительно будет зависеть от реализации IP-стека телефона. Таким образом, вы можете найти всевозможные чудесные причуды телефона. Я бы сказал, что если вы попытаетесь подключиться к другому адресу, который запрещен APN, это справедливое предположение, что соединение закроется. Поскольку у вас есть контроль над APN, вы можете открыть прочий «тестовый» адрес? Или подключиться к одному доступному адресу? – 2009-06-11 08:22:09

2

... может быть, первый запрос инициализирует сетевой уровень (*) в устройстве и, возможно, также JVM.

Я уверен, что он работает с www.microsoft.com тоже :-)

*) Я подозреваю, что это зависит от того, какое устройство вы работаете на. Я понятия не имею, что происходит, но может быть что угодно. Например: запуск радиоустройства, настройка сеанса с сетевым оператором, загрузка и запуск классов в jvm.

Попробуйте подключиться к 127.0.0.1 вместо Google и посмотреть, будет ли это делать более быстрые попытки.

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

+0

, если это так, будет ли работать, чтобы сделать запрос 127.0.0.1? –

+0

Что такое сетевой стек? как инициализировать это без запроса? –

+0

То, что я имел в виду, было всем, что нужно было для того, чтобы отправить ваши биты получателю. – KarlP