飞哥语录:编程说白了就是发送数据,接收数据,处理数据。
1.概述
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分。该协议支持所有平台,几乎可以把所有联网物品和外部连接起来,被用来当做传感器和致动器(比如通过Twitter让房屋联网)的通信协议。
2.特点
MQTT协议是为大量计算能力有限,且工作在低带宽、不可靠的网络的远程传感器和控制设备通讯而设计的协议,它具有以下主要的几项特性:
1、使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合;
2、对负载内容屏蔽的消息传输;
3、使用 TCP/IP 提供网络连接;
4、有三种消息发布服务质量:
- “至多一次”,消息发布完全依赖底层 TCP/IP 网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传 感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。
- “至少一次”,确保消息到达,但消息重复可能会发生。
- “只有一次”,确保消息到达一次。这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果。
5、小型传输,开销很小(固定长度的头部是 2 字节),协议交换最小化,以降低网络流量;
6、使用 Last Will 和 Testament 特性通知有关各方客户端异常中断的机制;
3.MQTT服务器搭建
要想实现消息推送功能,就先必须要搭建自己的推送服务器了
这里以Apollo的1.71版本为例,大家可以从Apollo官网根据自己操作系统的版本下载对应最新的服务器软件,下载完成后并将其解压
第一步:打开cmd命令行窗口,然后cd到解压路径的bin目录下,输入apollo create mqttbroker(这个名字可以任取)然后回车,这个步骤是创建我们自己的mqtt服务器,创建完成后在我们的bin目录下会多出mqttbroker一个文件夹,里面包含所有的我们服务器的配置信息;
第二步:进入到mqttbroker的mymqttbroker\etc路径下,将我们自己的tcp链接地址配置到apollo.xml文件中;
第三步:在命令行窗口cd 到mqttbroker的mymqttbroker\bin路径下,输入apollo-broker run开启服务,想要确定我们的服务是不是开启成功,只需要在浏览器中输入http://127.0.0.1:61680/ or https://127.0.0.1:61681/,初始密码为admin/password,进入成功,则服务开启成功;
4.Android 客户端编程
首先给大家介绍几个概念:
- topic:中文意思是“话题”。在MQTT中订阅了(subscribe)同一话题(topic)的客户端会同时收到消息推送。直接实现了“群聊”功能;
- clientId:客户身份唯一标识;
- qos:服务质量;
- retained:要保留最后的断开连接信息;
- MqttAndroidClient#subscribe():订阅某个话题;
- MqttAndroidClient#publish(): 向某个话题发送消息,之后服务器会推送给所有订阅了此话题的客户;
- userName:连接到MQTT服务器的用户名;
- passWord :连接到MQTT服务器的密码;
4.1添加权限
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
4.2发布、订阅消息详情请参考代码
5.相关API
6.Jar & 源码下载
声明:
1.文中部分资料来自百度百科;
2.本文参考学习了一下博主的优秀博客,我在这里深表感谢;
http://blog.sina.com.cn/s/blog_14d17b8ab0102wi7g.html
http://blog.csdn.net/djun100/article/details/25752491
http://blog.csdn.net/flyingsnow2211/article/details/48622981