当前位置: 首页 > news >正文

MQTT 消息推送详解

#MQTT 消息推送详解

MQTT(Message Queuing Telemetry Transport)是一种轻量级的发布/订阅消息协议,专为低带宽、高延迟或不稳定网络环境设计,非常适合物联网设备通信、移动消息推送等场景。

一、MQTT 核心概念

- **Broker(代理/服务器)**:消息的中转中心,负责接收客户端发布的消息并推送给订阅了对应主题的客户端。
- **Publisher(发布者)**:发送消息到某个主题的客户端。
- **Subscriber(订阅者)**:订阅一个或多个主题,接收该主题下的消息。
- **Topic(主题)**:消息的标签,支持层级结构,如 `sensor/temperature/room1`。
- **QoS(服务质量)**:
  - **0**:最多一次(可能丢失)
  - **1**:至少一次(保证到达,可能重复)
  - **2**:恰好一次(保证到达且不重复)
- **Will Message(遗愿消息)**:客户端异常断开时,Broker 自动发布的预设消息。
- **Retained Message(保留消息)**:Broker 为每个主题保留最后一条消息,新订阅者能立即收到。

二、MQTT 在 Android 上的实现(推送)

Android 端作为 MQTT 客户端,可以订阅主题接收实时推送,也可以发布数据到云端。

1. 添加依赖

推荐使用 **Eclipse Paho Android Service**(支持后台长连接、断线重连):

```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'
}
```

如果目标 API ≥ 21(Android 5.0+),还需添加 `android:usesCleartextTraffic="true"`(若 broker 未使用 TLS)。

2. 在 AndroidManifest.xml 中声明服务和权限

```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" />

<service android:name="org.eclipse.paho.android.service.MqttService" />
```

 3. 初始化 MQTT 客户端并连接

```kotlin
import org.eclipse.paho.android.service.MqttAndroidClient
import org.eclipse.paho.client.mqttv3.*

class MqttPushManager(context: Context, serverUri: String, clientId: String) {
    private val mqttClient = MqttAndroidClient(context, serverUri, clientId)
    private v

http://www.jsqmd.com/news/642484/

相关文章:

  • 2025-2026年国内外教少儿英语机构推荐:五大口碑产品评测对比领先小学阶段应试提分案例 - 品牌推荐
  • Python实战:用PyWavelets库实现连续小波变换(CWT)信号分析
  • Quill 编辑器光标意外跳转至顶部的解决方案
  • 【AIAgent代码审查黄金标准】:2026奇点大会联合IEEE发布的首个L3级可信审查评估框架(仅限首批200家获授)
  • 5大核心模块:重新定义英雄联盟游戏体验的技术解决方案
  • **链路追踪实战:用Go语言打造分布式系统的“心跳图谱”**在微服务架构日益普及
  • 【原创】阿里云Windows虚拟主机低成本部署ChatGPT代理服务实战
  • 企业级微服务架构设计与实践:从理论到落地
  • 【工业级多模态服务架构白皮书】:基于12个千万级AI应用验证的6层解耦架构(含视觉/语音/文本协同调度协议)
  • 金纳米棒包载阿霉素,DOX@AuNRs,金纳米棒包载紫杉醇,PTX@AuNRs化学特性
  • AIAgent可观测性治理盲区大起底:Trace丢失率超67%?用eBPF+OpenTelemetry构建全链路Agent行为图谱
  • 澜起科技年营收55亿:净利22亿 上海融迎及一致行动人套现超10亿
  • 如何用智能脚本3分钟搞定Windows与Office永久激活?
  • 告别云端依赖:用STM32F405+EC600N搭建一个离线/弱网可用的OTA固件升级系统
  • 壁挂式铜铝散热片(背篓)为何成为优选?
  • 手把手教你解决CMake升级后的CMAKE_ROOT错误(Ubuntu环境)
  • 未来不远发布F2全能家用机器人:3.6万元起,家务带娃撸猫一机搞定
  • OFA-COCO英文描述效果实测:语法准确、简洁自然的生成案例集
  • 云原生安全防护体系建设:从理论到实践
  • Shell集成的技术解析
  • MySQL记录锁+间隙锁可不可以防止删除操作而导致的幻读?
  • Redis如何利用Lua实现秒杀资格与库存的双重校验
  • 两级式光伏并网逆变器的Simulink仿真 光伏pv+Boost+三相并网逆变器 PLL锁相环
  • 手把手教你用STM32和ROS实现阿克曼小车PID控制
  • Day 4:分类评估深入(ROC曲线、PR曲线、阈值选择)
  • 基于gmid设计方法的二级运放优化与仿真验证
  • ITensors中关于的linkdims=使用的问题
  • 从零到代码卫士:我与 NVIDIA DGX Spark 的 72 小时
  • 视频Agent不再依赖GPU集群?2026奇点大会演示的轻量化Video-LLM编译栈(支持树莓派5实时推理),已触发3起专利交叉许可谈判
  • CSS文本渲染在不同操作系统差异_使用font-smoothing平滑化