Android-устройство должно быть подключено к серверу - C2DM, опрос или что-то третье?

В настоящее время я разрабатываю приложение, которое требует очень высоких требований.

Проект

Необходимо приложение, которое может взаимодействовать с сервером. Небольшие сообщения должны быть отправлены в приложение, которое может отображать уведомление или запускать действие.

Требования

Клиент должен быть уверен, что телефон постоянно "подключен".
Клиент ожидает, что приложение сможет определить, когда оно больше не подключено (или не может подключиться) к серверу, о котором оно сообщает. Пользователь.

Клиент должен иметь возможность отправлять сообщения на отдельные устройства
Если клиенту необходимо отправить сообщение на подключенные устройства и на отдельные устройства.

Мои мысли (или проблемы)

В настоящее время приложение опрашивает сервер с помощью HTTP-запроса раз в минуту — если приложение не может подключиться к серверу, пользователь получает уведомление. Опрос может определить, какое устройство звонит, и сообщить ему, есть ли для него сообщение.

Но...

IMO, это ужасный дизайн - он генерирует много лишнего трафика, использует ресурсы, которые, вероятно, не были необходимы, и предлагает много проблем с подключением (которые я не уверен, что когда-либо преодолею, независимо от того, какой метод использовал).

Мне нужен ваш опыт, чтобы выбрать правильное решение для моего проекта.

Я думал о C2DM, но я не уверен, что это может удовлетворить мои потребности? Является ли опрос единственным реальным решением? Есть ли третий вариант, о котором я не подумал?


person Repox    schedule 03.11.2011    source источник


Ответы (2)


Я бы назвал MQTT хорошим решением, хотя это то, с чем я больше всего знаком. Отказ от ответственности - я пишу MQTT-брокер с открытым исходным кодом. Вы можете добиться того, чего, я думаю, вы хотите, вот так:

Пусть где-нибудь работает брокер MQTT. Сервис на телефоне подключается к брокеру и подписывается на уникальную тему, например. device/23412364, где 23412364 – это уникальный идентификатор для каждого устройства, который далее называется ‹идентификатором телефона›. Когда ваш клиент хочет отправить сообщение на определенный телефон, сообщение отправляется на устройство/‹идентификатор телефона›. Если вы хотите, чтобы сообщения отправлялись на все телефоны, то телефоны также могут подписаться, например, на устройство/все.

Если вы сделаете свои подписки и сообщения с качеством обслуживания 1 или 2 и установите для параметра «чистый сеанс» для клиентов значение false, то сообщения будут поставлены в очередь на брокере, если телефон по какой-либо причине отключится. QoS=1 означает «хотя бы один раз», а QoS=2 означает «ровно один раз». Когда телефон снова подключится, эти сообщения будут доставлены.

Вы также можете отправить телефону сообщение типа «зарегистрируйте ‹идентификатор телефона›» в фиксированную тему сразу после подключения (например, в тему «зарегистрироваться»). Очень полезной функцией MQTT является «Последняя воля и завещание». При подключении клиента у вас есть возможность указать сообщение Will и тему, по которой оно должно быть доставлено, в случае неожиданного отключения клиента (т. е. без сообщения брокеру о том, что он собирается отключиться). Таким образом, вы можете установить сообщение «отменить регистрацию ‹идентификатор телефона›» и доставить его в ту же фиксированную тему, что и выше (в этом примере «зарегистрироваться»). Затем у вас может быть другой клиент MQTT на стороне сервера, подписанный на «регистрацию». Когда телефон подключается, он отправляет сообщение «зарегистрировать ‹идентификатор телефона›», когда он отключается, брокер отправляет «отменить регистрацию ‹идентификатора телефона›». Таким образом, клиент MQTT может отслеживать подключенных клиентов на стороне сервера.

В конце концов, вы можете получать уведомления, если соединение TCP прерывается через обычный сетевой код.

Некоторые соответствующие ссылки:

person ralight    schedule 05.11.2011
comment
Спасибо за отличный пост со ссылками на дополнительную информацию о MQTT. Я принял ваш ответ за подробное описание, которое позволило мне двигаться вперед в своем развитии. - person Repox; 07.11.2011

Я наткнулся на новую службу под названием Parse.com. реализация для Android с использованием их бэкэнда. Это коммерческий, но у них есть и бесплатный план.

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

person Lycha    schedule 03.11.2011