一.推送几种实现方式:

(1)通过SMS(Short Message Service,短信群发服务系统)

进行服务器端和客户端的交流通信。在Android平台上,可以通过拦截SMS消息并解析内容来了解服务器的意图,就可以实现完全的实时操作。但是该方案成本比较高,而且基本依赖运营商。

(2)循环主动定时获取。

该方法需要客户端编写一个定时或者周期性访问服务器端接口,从而获取最新的消息。但是,轮询的频率太快会消耗网络带宽和电量,太慢会导致消息更新不及时。

(3)长连接方案。

需要在客户端开通一个服务来保持和服务器端的持久连接(Apple和谷歌的C2DM采用该机制),从而当服务器端有最新的消息时,可以及时接收到通知。但是该方案也会消耗系统的性能和电量,当Android系统可用资源较低时,系统会关闭服务,从而与系统的连接会中断。

(4)第三方平台.

目前有免费的第三方平台,个推,百度,极光推送。

相比较其它两种方案,第三种方案的优势还是比较明显,而且可行性最高。在Android系统软件中编写系统服务或开机启动功能,当系统资源利用率较低而关闭服务器时,可以再重启该服务,进而实现持久连接的方式。

二.长连接

 目前主流的方案是维持一个长连接。

IOS长连接是由苹果系统来维护的(APNS Apple Push Notification service),也就是说苹果的IOS系统在系统级别维护了一个客户端和苹果服务器的长链接,IOS上的所有应用上的推送都是先将消息推送到苹果。

android的长连接是由每个应用各自维护的,但是google也推出了和苹果技术架构相似的推送框架,C2DM, GCM 云端推送功能,但是由于google的服务器不在中国境内.要实现需要通过代理的方式。

3.android目前,有两种较好的方式可以实现这种持久连接的功能,一种是IBM的MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)协议实现PUSH消息功能,一种是XMPP协议。

1. MQTT协议

官网:https://github.com/mqtt/mqtt.github.io/wiki/software?id=software

优点:协议简洁、小巧、可扩展性强、省流量、省电,目前已经应用到企业领域

MQTT是IBM开发的一个即时通信协议,该协议支持所有平台,可以将所有物联网设备和外部连接起来,被用来当作传感器和致动器的通信协议。使用它作为消息推送协议的基本原理是:使用消息代理服务器(Message Broker),客户端连接上消息代理服务器,跟服务器协商可以接受哪些类型的消息,同时也可以发布自己的消息,这些消息根据协议的内容可以被其它客户端收到,业务流程如图所示

MQTT只是IBM推出的一个消息协议,基于TCP/IP的。两个App端发送和接收消息需要中间人,这个中间人就是消息服务器(比如ActiveMQ/RabbitMQ/),三者通信协议就是MQTT。

1. 常见MQTT Client libraries:

1.Wmqtt

2.Paho MQTT http://www.eclipse.org/paho/files/javadoc/index.html

3.fusesource.mqtt-client

2. 常见Broker消息服务器

Erlang MQTT Broker http://emqtt.com/ http://emqtt.io http://docs.emqtt.com/en/latest/

Apache ActiveMQ

Apache Apollo http://activemq.apache.org/apollo/

Mosca

Mosquitto

2. XMPP协议

第二种是采用基于XMPP协议的第三方Androidpn实现消息推送。

优点:协议成熟、强大、可扩展性强、目前主要应用于许多聊天系统中,且已有开源的Java版的开发实例androidpn。

缺点:协议较复杂、冗余(基于XML)、费流量、费电,部署硬件成本高。

三.实现方案

Client: Paho MQTT client , java实现,更好的嵌入已有的项目。

Broker: emqtt, 消息代理作为消息中转平台,

1. 物理体系结构

2. 推送消息流程图

React Native 实现MQTT 推送调研 (1)的更多相关文章

  1. React Native 之极光推送jpush-react-native 手把手配置

    这是 react native 配置极光推送使用的组件,比较常用https://github.com/jpush/jpush-react-native 先把组件地址贴出来,方便大家使用参考.如果这个大 ...

  2. mqtt推送介绍

    方案1.使用GCM服务(Google Cloud Messaging) 简介:Google推出的云消息服务,即第二代的C2DM. 优点:Google提供的服务.原生.简单,无需实现和部署服务端. 缺点 ...

  3. 【开源】MQTT推送服务器——zer0MqttServer(Java编写)

    目录 说明 功能 如何使用 参考帮助 说明 重要的放前面:V1.0版本是一个非常基础的版本,除了完整的MQTT协议实现外,其他功能什么都没做. MQTT 协议是 IBM 开发的即时通讯协议,相对于 I ...

  4. Android Server Push - MQTT推送实现tokudu

    转自:http://www.juapk.com/thread-2834-1-1.html 项目说明:采用MQTT协议实现Android推送消息传输协议:IBM的MQTT协议 JAR包地址:下载服务器安 ...

  5. react-native 使用leanclound消息推送

    iOS消息推送的基本流程 1.注册:为应用程序申请消息推送服务.此时你的设备会向APNs服务器发送注册请求.2. APNs服务器接受请求,并将deviceToken返给你设备上的应用程序 3.客户端应 ...

  6. 【Android应用开发】 推送原理解析 极光推送使用详解 (零基础精通推送)

    作者 : octopus_truth 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/45046283 推送技术产生场景 : -- ...

  7. React Native(三)——推送jpush-react-native

    瞬间,有种满血复活的赶脚…… 原因呢,就是熟悉了rn项目的套路:当老大问道,“推送功能看了还是没看呢?”的时候,虽然一直没有调试通,但还是不怯场的回答,“看了,按照网上说的也配了,但是还是用不了,不知 ...

  8. Android推送方案分析(MQTT/XMPP/GCM)

    本文主旨在于,对目前Android平台上最主流的几种消息推送方案进行分析和对比,比较客观地反映出这些推送方案的优缺点,帮助大家选择最合适的实施方案. 方案1. 使用GCM服务(Google Cloud ...

  9. 【转载】Android推送方案分析(MQTT/XMPP/GCM)

    http://m.oschina.net/blog/82059 本文主旨在于,对目前Android平台上最主流的几种消息推送方案进行分析和对比,比较客观地反映出这些推送方案的优缺点,帮助大家选择最合适 ...

随机推荐

  1. 模板引擎doT.js介绍及如何判断对象为空、如何嵌套循环···

    doT.js 灵感来源于搜寻基于 V8 和 Node.js ,强调性能,最快速最简洁的 JavaScript 模板函数 引入 javascript 文件: <script type=" ...

  2. sqlserver表分区与调优与行列转换

    转自: http://www.cnblogs.com/knowledgesea/p/3696912.html http://www.open-open.com/lib/view/open1418462 ...

  3. SQL Select的执行顺序

    1.FROM 2.ON 3.JOIN 4.WHERE 5.GROUP BY 6.WITH CUBE or WITH ROLLUP 7.HAVING 8.SELECT 9.DISTINCT 10.ORD ...

  4. PHP之路,Day1 - PHP基础

    本节内容  1.PHP介绍  2.第一个PHP脚本程序  3.PHP语言标记  4.指令分割符  5.程序注释  6.在程序中使用空白符的处理  7.变量  8.变量的类型  9.数据类型之间相互转换 ...

  5. ios开发——仿新版iBooks书本打开与关闭动画

    IOS新版iBooks吸引人的地方除了有干净整洁的界面.方便灵活的操作以及大容量的书籍容量以外.还有其优秀的用户交互,尤其是其动画的使用.打开一本书时书本缓慢放大并打开.关闭一本书后书本关闭并回到原位 ...

  6. Winform-控制边框显示属性

  7. [AngualrJS] ng-strict-di

    In Angular 1.5 introduces "compoment" syntax. But ng-annotate doesn't understand ".co ...

  8. 使用python selenium进行自动化functional test

    Why Automation Testing 现在似乎大家都一致认同一个项目应该有足够多的测试来保证功能的正常运作,而且这些此处的‘测试’特指自动化测试:并且大多数人会认为如果还有哪个项目依然采用人工 ...

  9. mysql 5.7.12 新增 X plugin 详解

     https://dev.mysql.com/doc/refman/5.7/en/document-store.html   原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息 ...

  10. C++函数的传入参数是指针的指针(**)的详解

    要修改变量的值,需要使用变量类型的指针作为参数或者变量的引用.如果变量是一般类型的变量,例如int,则需要使用int 类型的指针类型int *作为参数或者int的引用类型int&.但是如果变量 ...