GCM против Socket в android

Насколько мне известно, в большинстве учебных пособий и примерах для android используется использование GCM для отправки данных с сервера на устройство Android; и использовать скрипты php вместе с методами post/get для отправки данных с устройства на сервер.

Мой друг (кто-то, кто не знает о программировании в Android) просто спросил меня: почему мы не можем использовать класс Socket в java? В традиционном java-программировании вы используете сокеты (IP-адрес + номер порта) для достижения функциональности, аналогичной GCM (одиночные серверы с несколькими серверами), используя правильные методы, которые вы можете обеспечить, чтобы сообщения не терялись, как gcm).

Может ли этот традиционный подход к сокету быть реализован и в android? Если да, каковы плюсы и минусы GCM и Sockets? В каких ситуациях целесообразно использовать сокеты? Whatsapp и множество других приложений, насколько мне известно, используют GCM. Существуют ли приложения, которые используют сокеты?

P.S: Я просто ученик C.S.; извиняюсь, если у меня есть свои понятия где-то где-то

Ответы

Ответ 1

GCM также использует сокеты. Тем не менее, они управляются системой и, таким образом, могут делать то, что не может сделать обычное приложение. Как правило, для любого типа "push" уведомлений система должна иметь долгоживущий сокет, а "уведомление" - это всего лишь некоторые данные, полученные в этом сокете. Все это не так сложно реализовать на всегда подключенной машине, такой как рабочий стол или сервер, но на мобильных устройствах возникают дополнительные проблемы. Например, коммутационные сети (3G → WiFi), выходящие за пределы диапазона, поддерживают соединение, не поддерживая устройство в течение всего времени (и убивая батарею в процессе). Так что да, вы могли бы реализовать что-то подобное с помощью службы, сокетов и собственного сервера, но это не тривиально на мобильных устройствах.

Ознакомьтесь с http://mqtt.org/ для реализации с открытым исходным кодом.