Выполнение http-запроса в J2ME - PullRequest
3 голосов
/ 26 мая 2009

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

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

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

РЕДАКТИРОВАТЬ:

Отправка запроса в Google при инициализации:

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

Без запроса на инициализацию:

  • Первый запрос = 40сек
  • Повтор первого запроса = 5сек

Ответы [ 2 ]

4 голосов
/ 10 июня 2009

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

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

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

Джеймс

2 голосов
/ 26 мая 2009

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

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

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

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

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

...