Если вы хотите решить эту проблему, используя только HTTP, длинный опрос будет лучшим способом. Это довольно просто. Сначала необходимо настроить URL-адрес на стороне сервера для уведомления (например, http://example.com/notify
) и определить протокол уведомления. Протокол может быть таким же простым, как несколько текстовых строк, и каждая строка является событием. Например,
MSG user1
PHOTO user2 album1
EMAIL user1
HEARTBEAT 300
Тема опроса на телефоне работает следующим образом,
- Установите HTTP-соединение с URL-адресом уведомления. В J2ME вы можете использовать GCF HttpConnection.
- Сервер будет блокироваться, если нет событий для отправки.
- Если сервер отвечает, получите каждую строку и создайте новый поток, чтобы уведомить приложение и вернуться к # 1.
- Если соединение по какой-либо причине закрывается, поспите некоторое время и вернитесь к шагу 1.
Вы должны обратить внимание на следующие детали реализации,
- Настройка таймаутов HTTP на клиенте и сервере. Чем дольше время ожидания, тем эффективнее. Тайм-аут соединения приведет к переподключению.
- Включить поддержку активности HTTP на телефоне и на сервере. Трехстороннее рукопожатие TCP дорого обходится в GPRS, поэтому старайтесь избегать его.
- Обнаружение устаревших соединений. В мобильных средах очень просто получить устаревшие HTTP-соединения (соединение разорвано, но поток опроса все еще ждет). Вы можете использовать сердцебиение для восстановления. Скажите, что сердцебиение составляет 5 минут. Сервер должен отправлять уведомления каждые 5 минут. Если нет данных, чтобы нажать, просто отправьте СЕРДЦЕ. На телефоне поток опроса должен попытаться закрыть и снова открыть соединение для опроса, если ничего не получено в течение 5 минут.
- Тщательная обработка ошибок подключения. Длинный опрос не работает хорошо, когда есть проблемы с подключением. Если не обработано должным образом, это может быть нарушителем соглашения. Например, вы можете тратить много пакетов на шаге 4, если сон не достаточно длинный. Если возможно, проверьте доступность GPRS на телефоне и переведите поток опроса в режим ожидания, когда GPRS недоступен для экономии заряда батареи.
- Стоимость сервера может быть очень высокой, если она не реализована должным образом. Например, если вы используете сервлет Java, каждое работающее приложение будет иметь как минимум одно соответствующее соединение для опроса и его поток. В зависимости от количества пользователей, это может быстро убить Tomcat :) Вам необходимо использовать ресурсоэффективные технологии, такие как Apache Mina.
Мне сказали, что есть другие, более эффективные способы отправки уведомлений на телефон, такие как использование SMS и некоторые хитрости на уровне IP. Но вы либо должны сделать какое-то непереносимое программирование низкого уровня, либо столкнуться с риском нарушения патента. Длинные опросы - это, вероятно, лучшее, что вы можете получить, используя только HTTP-решение.