Вопрос

У меня есть приложение J2ME, запущенное на моем мобильном телефоне (клиент).,

Я хотел бы открыть HTTP-соединение с сервером и продолжить опрос для получения обновленной информации на сервере.

Каждый выполняемый опрос израсходует байты GPRS и в долгосрочной перспективе обойдется дорого, поскольку выставление счетов GPRS основано на отправленных и полученных пакетах.Существует ли эффективный в байтах способ опроса с использованием протокола HTTP?.

Я также слышал о длительном опросе, но я не уверен, как это работает и насколько эффективно это было бы.

На самом деле предпочтительным способом для Сервера было бы сообщить приложению phone, что новые данные готовы к использованию, таким образом, опрос не потребуется, однако я не знаю об этих методах, особенно в J2ME.

Это было полезно?

Решение

Если вы хотите решить эту проблему, используя только HTTP, длинный опрос был бы лучший способ.Это довольно легко.Сначала вам необходимо настроить URL-адрес на стороне сервера для уведомлений (например, http://example.com/notify) и определить протокол уведомления.Протокол может состоять из нескольких текстовых строк, и каждая строка является событием.Например,

  MSG user1
  PHOTO user2 album1
  EMAIL user1
  HEARTBEAT 300

Ветка опроса на телефоне работает следующим образом:

  1. Установите HTTP-соединение с URL-адресом уведомления.В J2ME вы можете использовать GCF HttpConnection.
  2. Сервер заблокируется, если нет событий для отправки.
  3. Если сервер отвечает, получите каждую строку и создайте новый поток для уведомления приложения и возврата к #1.
  4. Если соединение по какой-либо причине закрывается, подождите немного и вернитесь к шагу 1.

Вы должны обратить внимание на следующие детали реализации:

  1. Настройте тайм-ауты HTTP как на клиенте, так и на сервере.Чем дольше тайм-аут, тем эффективнее.Время ожидания соединения приведет к повторному подключению.
  2. Включите поддержку активности HTTP как на телефоне, так и на сервере.Трехстороннее рукопожатие TCP является дорогостоящим с точки зрения GPRS, поэтому старайтесь избегать его.
  3. Обнаружение устаревших соединений.В мобильных средах очень легко получить устаревшие HTTP-соединения (соединение пропало, но поток опроса все еще ожидает).Вы можете использовать сердцебиение для восстановления.Скажем, частота пульса составляет 5 минут.Сервер должен отправлять уведомление каждые 5 минут.Если нет данных для отправки, просто отправьте HEARTBEAT.На телефоне поток опроса должен попытаться закрыть и снова открыть соединение для опроса, если в течение 5 минут ничего не получено.
  4. Тщательная обработка ошибок подключения.Длинный опрос не работает, если есть проблемы с подключением.Если с этим не обращаться должным образом, это может стать решающим фактором.Например, вы можете потерять много пакетов на шаге 4, если сон будет недостаточно продолжительным.Если возможно, проверьте доступность GPRS на телефоне и приостановите опрос, когда GPRS недоступен, чтобы сэкономить заряд батареи.
  5. Стоимость сервера может быть очень высокой, если он не реализован должным образом.Например, если вы используете сервлет Java, каждое работающее приложение будет иметь по крайней мере одно соответствующее соединение опроса и его поток.В зависимости от количества пользователей это может быстро убить Tomcat :) Вам необходимо использовать ресурсосберегающие технологии, такие как Apache Mina.

Мне сказали, что есть другие, более эффективные способы отправки уведомлений на телефон, например, с помощью SMS и некоторых приемов на уровне IP.Но вам либо придется заняться непереносимым программированием низкого уровня, либо столкнуться с риском нарушения патентов.Длинный опрос, вероятно, лучшее, что вы можете получить с помощью только HTTP-решения.

Другие советы

Я не знаю точно, что вы подразумеваете под «опросом», вы имеете в виду что-то вроде IMAP в режиме ожидания?Соединение остается открытым, и не требуется дополнительных затрат на повторное создание самого соединения.Как уже говорилось, другим возможным решением является заголовок HEAD HTTP-запроса (забыл, спасибо!).

Посмотрите на это руководство основы HTTP-соединений в J2ME.

Передача данных в приложение/устройство без поддержки Push (например, Blackberry) невозможна.

Тот Самый ГОЛОВНОЙ HTTP-запрос это метод, который HTTP предоставляет, если вы хотите проверить, изменилась страница или нет, он используется браузерами и прокси-серверами для проверки того, была ли страница обновлена или нет, без использования большой пропускной способности.

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

Лучший способ сделать это — использовать сокетное соединение.Их используют многие приложения, такие как GMail.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top