MQTT Android客户端的使用介绍

MQTT Android客户端的使用介绍

.

简介

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议。

它是一种 发布/订阅 ,极其简单和轻量级的消息传递协议,专为受限设备和低带宽,高延迟或不可靠的网络而设计。它的设计思想是轻巧、开放、简单、规范,易于实现。这些特点使得它对很多场景来说都是很好的选择,特别是对于受限的环境如机器与机器的通信(M2M)以及物联网环境。相对于XMPPMQTT更加轻量级,并且占用的宽带低。

.

.

MQTT体系结构的介绍

在这里插入图片描述

网络连接

由底层传输协议提供给MQTT使用的架构

  • 底层传输协议能够连通客户端和服务端
  • 底层传输协议提供有序的,可靠的,双向字节流

应用消息

指通过MQTT在网络中传输的应用程序数据。当应用消息通过MQTT传输的时候会附加上质量服务(QoS)和话题名称。

客户端

指使用MQTT的程序或设备。客户端总是去连接服务端。它可以

  • 发布其他客户端可能会感兴趣的应用消息
  • 订阅自己感兴趣的的应用消息
  • 退订应用消息
  • 从服务端断开连接

服务端

扮演订阅或发布应用消息的客户端之间的中间人。一个服务端

  • 接受客户端的网络连接
  • 接受客户端发布的应用消息
  • 处理客户端订阅和退订的请求
  • 转发匹配客户端订阅的应用消息

订阅

一个订阅由一个话题过滤器和一个最大的QoS组成。一个订阅只能关联一个会话。一个会话可以包含多个订阅。每个订阅都有不同的话题过滤器。

话题名称

指附着于应用消息的标签,服务端用它来匹配订阅。服务端给每个匹配到的客户端发送一份应用信息的拷贝。

话题过滤器

包含在订阅里的一个表达式,来表示一个或多个感兴趣的话题。话题过滤器可以包含通配符。

会话

一个有状态的客户端和服务端的交互。有些会话的存续依赖于网络连接,而其他则可以跨越一个客户端和服务端之间的多个连续的网络连接。

MQTT控制包

通过网络连接发送的包含一定信息的数据包。MQTT规范定义了14个不同类型的控制包,其中一个(PUBLISH包)用来传输应用信息。

.

.

MQTT的优点

.

  1. 轻巧高效,最大限度地减少客户端和网络带宽所需的资源

  2. 使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合

  3. 对负载内容屏蔽的消息传输

  4. 使用 TCP/IP 提供网络连接(持久会话)

  5. 使用 SSL/TLS 提供网络安全和信任

  6. 具有一种“遗嘱”功能,该功能通知订户客户机从 MQTT 服务器异常断开连接

  7. 可以指定服务质量 (QoS) 级别以支持消息可靠性

  • qos为0: “至多一次”,消息发布完全依赖底层 TCP/IP 网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送
  • qos为1: “至少一次”,确保消息到达,但消息重复可能会发生。这一级别可用于如下情况,你需要获得每一条消息,并且消息重复发送对你的使用场景无影响
  • qos为2: “只有一次”,确保消息到达一次。这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果

.

.

MQTT核心参数说明:

.

  • topic: 中文意思是“话题”。在MQTT中订阅了(subscribe)同一话题(topic)的客户端会同时收到消息推送。直接实现了“群聊”功能

  • clientId: 客户身份唯一标识

  • qos: 服务质量

  • retained: 要保留最后的断开连接信息

  • userName: 连接到MQTT服务器的用户名

  • passWord: 连接到MQTT服务器的密码

.

.

MQTT最主要方法的介绍:

.

1. connect()方法

作用: 连接MQTT服务器

参数说明:

  • options 用来携带连接服务器的一系列参数,例如用户名、密码等。
  • userContext 可选对象,用于向回调传递上下文。一般传null即可。
  • callback 用来监听MQTT是否连接成功的回调
 @Override
 public IMqttToken connect(MqttConnectOptions options, Object userContext,
   IMqttActionListener callback) throws MqttException {
   
    //...
}

.

2. publish()方法

作用: 发布消息,向服务端推送消息。向某个话题发送消息,之后服务器会推送给所有订阅了此话题的客户

参数说明:

  • topic 发布消息的主题
  • payload 消息内容的字节数组
  • qos 提供消息的服务质量,可传0、1或2
  • retained 是否在服务器保留断开连接后的最后一条消息
 @Override
 public IMqttDeliveryToken publish(String topic, byte[] payload, int qos,
   boolean retained) throws MqttException, MqttPersistenceException {
   
    //...
 }

.

3. subscribe()方法

作用: 订阅消息主题

参数说明:

  • topic 订阅消息的主题
  • qos 订阅消息的服务质量,可传0、1或2
 @Override
 public IMqttToken subscribe(String topic, int qos) throws MqttException,
   MqttSecurityException {
   
    //...
 }

.

.

MQTT安卓客户端的使用介绍

.

在全局的build.gradle文件中添加

repositories {
   
    maven {
   
        url "https://repo.eclipse.org/content/repositories/paho-snapshots/"
    }
}

.

.

在项目build.gradle文件中添加依赖

dependencies {
   
    implementation 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.1.0'
    implementation 'org.eclipse.paho:org.eclipse.paho.android.service:1.1.1'
}

.

AndroidManifest.xml 添加下面的限权

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />

.

AndroidManifest.xml 注册Service服务

<!--MqttService-->
<service andro
  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
实现 MQTT Android 客户端可以使用 Eclipse Paho MQTT 客户端库。下面是一个简单的实现步骤: 1. 添加依赖 在项目的 build.gradle 文件中添加以下依赖: ```groovy dependencies { implementation 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.2.5' implementation 'org.eclipse.paho:org.eclipse.paho.android.service:1.1.1' } ``` 2. 创建 MQTT 客户端 创建一个 MqttAndroidClient 对象,并设置连接参数。这里需要设置 MQTT 服务器的 URL、客户端 ID、用户名和密码等信息。 ```java String serverUri = "tcp://mqtt.eclipse.org:1883"; String clientId = MqttClient.generateClientId(); MqttAndroidClient client = new MqttAndroidClient(context, serverUri, clientId); MqttConnectOptions options = new MqttConnectOptions(); options.setUserName("username"); options.setPassword("password".toCharArray()); ``` 3. 连接到 MQTT 服务器 使用 MqttAndroidClient 对象连接到 MQTT 服务器。可以设置一个回调函数来处理连接结果。 ```java IMqttToken token = client.connect(options); token.setActionCallback(new IMqttActionListener() { @Override public void onSuccess(IMqttToken asyncActionToken) { // 连接成功 } @Override public void onFailure(IMqttToken asyncActionToken, Throwable exception) { // 连接失败 } }); ``` 4. 订阅 MQTT 主题 通过 MqttAndroidClient 对象订阅一个或多个 MQTT 主题。可以设置一个回调函数来处理接收到的消息。 ```java String topic = "my/topic"; int qos = 1; IMqttToken subToken = client.subscribe(topic, qos); subToken.setActionCallback(new IMqttActionListener() { @Override public void onSuccess(IMqttToken asyncActionToken) { // 订阅成功 } @Override public void onFailure(IMqttToken asyncActionToken, Throwable exception) { // 订阅失败 } }); client.setCallback(new MqttCallbackExtended() { @Override public void connectComplete(boolean reconnect, String serverURI) { // 连接完成 } @Override public void connectionLost(Throwable cause) { // 连接断开 } @Override public void messageArrived(String topic, MqttMessage message) throws Exception { // 接收到消息 } @Override public void deliveryComplete(IMqttDeliveryToken token) { // 消息传递完成 } }); ``` 5. 发布 MQTT 消息 通过 MqttAndroidClient 对象发布一条 MQTT 消息到指定主题。 ```java String topic = "my/topic"; String payload = "Hello, MQTT!"; int qos = 1; boolean retained = false; IMqttDeliveryToken pubToken = client.publish(topic, payload.getBytes(), qos, retained); pubToken.setActionCallback(new IMqttActionListener() { @Override public void onSuccess(IMqttToken asyncActionToken) { // 发布成功 } @Override public void onFailure(IMqttToken asyncActionToken, Throwable exception) { // 发布失败 } }); ``` 以上就是一个简单的 MQTT Android 客户端的实现步骤。需要注意的是,如果需要在后台使用 MQTT 客户端,可以使用 Eclipse Paho Android Service,它提供了在后台运行的 MQTT 连接和订阅功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值