MQTT协议
如果想好什么方向,一点都不能改变的话,那么这个方向就会成为你的禁锢,遇到更好的选择更好的,你的路才能走得更加 顺利。 --随笔
实际之前也没有了解过这个这个网络协议,只要涉及到网络学习想到的就是HTTP|OkHTTP,这样的想法反而更多的时候会束缚到我,直到在一次做项目的时候被要求了用到这个协议,于是就简单的记了以下内容:
MQTT概述
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是轻量级基于代理的发布/订阅的消息传输协议,但是不会保证消息的顺序,属于应用层协议,设计思想是开放、简单、轻量、易于实现。这些特点使它适用于受限环境,例如:
- 网络代价昂贵,带宽低、不可靠。
- 在嵌入设备中运行,处理器和内存资源有限。
该协议的特点有:
1.使用发布/订阅(Pub/Sub)消息模式,提供一对多的消息发布,解除应用程序耦合。
2.对负载内容屏蔽的消息传输。
3.使用 TCP/IP 提供网络连接。
4.有三种消息发布服务质量:
①"至多一次",消息发布完全依赖底层 TCP/IP 网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。
②"至少一次",确保消息到达,但消息重复可能会发生。
③"只有一次",确保消息到达一次。这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果。
5.小型传输,开销很小(固定长度的头部是 2 字节),协议交换最小化,以降低网络流量。
6.使用 Last Will (临终遗嘱功能)和 Testament(遗嘱) 特性通知有关各方客户端异常中断的机制。
MQTT之Android实现
配置Android端的MQTT需要的参数
Topic: 订阅的事件,也是主题
URL: MQTT服务器的地址
username&password: 账户与密码
ClientId: 客户端的ID,可以自定义,必须保证唯一性,否则连接服务器的时候会导致服务器断开。和服务器里的”客户机标识“不能一致
private String host = "tcp://49.235.228.156:1883";
private String userName = "thoughtCoding";
private String passWord = "tc123123";
private String clientId = "landlord's cat";
//订阅模块
public void subscribe(String topic,int qos){
if(client != null){
int[] Qos = {qos};
String []topic1 = {topic};//订阅的主题
try {
client.subscribe(topic1, Qos);//订阅信息
Log.d(TAG,"订阅topic (sub): "+topic);
} catch (MqttException e) {
e.printStackTrace();
}
}
}
步骤:
1、添加依赖
2、声明权限
3、开启服务