使用 Android 开发 MQTT 客户端

2023-10-26

MQTT 代表消息队列遥测传输,它是一种功能强大的消息传输协议,主要用于机器对机器 (M2M) 和物联网 (IoT) 通信上下文。 MQTT 在这些情况下是首选,因为它易于实施,并且非常适合资源有限的设备。

在本文中,我们将开发一个使用 MQTT 协议的 Android 移动应用程序。

MQTT vs HTTP

MQTT 的竞争对手是旧的、但金子般的 HTTP 协议。

但是,为什么要为您的项目选择 MQTT 协议呢?

下面是一个简短的比较表,以更好地阐明主要方面:

综上所述,MQTT 相比 HTTP 更简单、更小、更安全。

MQTT 简而言之

MQTT 是一种发布-订阅客户端-服务器消息传输协议。

让我们明确一下发布-订阅和客户端-服务器架构的含义。

发布订阅

在发布/订阅架构中,发送者(发布者)不直接将消息传输给特定的接收者(订阅者),而是将发布的消息分类为“类别”(称为主题),而不知道可能有哪些订阅者。

发布者和订阅者从不直接相互联系。它们之间的连接由称为代理的第三个组件处理。

现实生活中发布/订阅模式的一个实际例子可能是报纸:记者(出版商)在报纸(经纪人)上写了几篇文章,但他们不知道有多少读者(订阅者)会阅读那篇文章。

客户端服务器

在客户端-服务器架构中,客户端连接到服务器以使用服务。

在 MQTT 上下文中,MQTT 客户端是通过网络连接到 MQTT 代理的设备。 MQTT 代理(服务器)提供的服务是发布和/或订阅一个或多个主题的可能性。在 MQTT 中,客户端可以是发布者和订阅者或两者兼而有之。

连接

在开始主题上的消息交换之前,客户端需要通过向代理发送 CONNECT 消息来启动通信。

通过此消息,客户端将自己呈现给提供以下主要信息的代理:

  • ClientID

    ClientID 是代理用来标识客户端并存储有关它的信息(称为会话)的唯一 ID。

    空的 ClientID 意味着“匿名”连接:因此,代理不会记住有关客户端的任何信息。

  • CleanSession

    如果 CleanSession 设置为 false 并且代理存储了该客户端的信息,则代理使用现有会话并将先前排队的消息传递给客户端。

    相反,如果该标志设置为 true,则意味着丢弃该客户端的所有现有会话和消息(如果 ClientId 为空,则为必需)。

  • KeepAlive

    此间隔以秒为单位表示,定义了代理和客户端可以在不发送消息的情况下保持联系的最长时间。 客户端需要在 KeepAlive 期间定期向代理发送 PING 消息以保持连接处于活动状态。

  • Username and Password(可选)

    客户端可以发送用户名和密码以提高通信安全性。

  • WillMessage (可选)

    客户端可以以 MQTT 消息和主题的形式指定其最后的遗嘱消息。当客户端“严重”断开连接时,代理将代表客户端发送此消息。

主题

如前所述,MQTT 代理使用主题来决定哪个订阅者接收哪个消息。

客户端在使用主题之前不会创建主题。服务器接受每个有效主题而无需任何初始化。

主题是具有以下特征的字符串:

  • 长度至少为 1 个字符
  • 区分大小写
  • 由一个或多个以“/”分隔的级别组成

假设您的房子周围散布着温度传感器。这些传感器使用 MQTT 与恒温器通信,恒温器使用此信息来调节家庭供暖系统。

每个传感器(发布者)通过发布特定的 MQTT 主题来传达其温度,恒温器(订阅者)通过检查这些主题来监控温度;下面是主题结构的示例:

发布

订阅

退订

Android 开发MQTT

示例/简单的 MQTT Android 应用程序

连接到 MQTT 代理

向代理发布主题

从代理订阅主题

断开连接

源代码

详情参阅 - 亚图跨际

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Android 开发 MQTT 客户端 的相关文章

随机推荐

  • 读书笔记-看见未来:改变互联网世界的人们

    作者 余晨 推荐序二 未来从来不会自动地发生 世界正在重新 造物 它既是虚拟意义上的 又同时是实物意义上的 宙斯在假眠 而诸神则各逞其能 时代 曾经刊登过的一篇文章认为 今天的个人计算机革命和互联网之所以成为这样 乃是继承了20世纪60年代
  • LLVM汇编语言指导手册之指令手册

    下面是我对llvm汇编中一些不常用的指令的总结 shl 指令 语法
  • wazuh日志审计--定制规则

    日志审计 定制规则 目录布局 规则集文件夹结构如下所示 在接收到agent传来的日志后 manager会根据 var ossec ruleset decoders里面的各种规则对日志进行处理 提取到了指定字段的值之后再根据 var osse
  • 物理这一块真不好搞,

    研究了一段PHYSX 发现真是寸步难行 英文文档也不是很详细 哎 没人带着的话 还是不搞为好 继续封装软引擎吧 没法干了 心里泼凉泼凉的 哎 咋弄呢 看来只能当个兴趣爱好了 或许用下游戏引擎 看看有没有集成好的
  • TensorFlow 深度学习笔记 Stochastic Optimization

    Stochastic Optimization 转载请注明作者 梦里风林 Github工程地址 https github com ahangchen GDLnotes 欢迎star 有问题可以到Issue区讨论 官方教程地址视频 字幕下载
  • adb移植到Android平台使用

    adb移植到Android平台使用 1 工具源码 所需源码 openssl git clone https github com openssl openssl git zlib 1 2 8 git clone https github c
  • JSOUP爬取4K高清壁纸

    jsoup jar包 1 11 2 链接 https pan baidu com s 1pe3 r5 YB pGEsosfRLbsA pwd 41w5 提取码 41w5 效果 代码 import org jsoup Jsoup import
  • Java.nio.file.NoSuchFileException] - 文件未找到异常处理及解决方法

    Java nio file NoSuchFileException 文件未找到异常处理及解决方法 在日常的Java开发中 我们经常会遇到各种异常情况 其中之一就是 Java nio file NoSuchFileException 即文件未
  • 求帮助安装mysql 出现红色感叹号

  • 【python】【django】cursor.fetchall()的结果是元组

    今天做测试 用django db 的connection来执行一个非常简单的查询语句 sql str select col 1 from table 1 where criteria 1 cursor connection cursor c
  • 混乱的代码是技术债吗

    翻译自 Uncle Bob 的 Blog A Mess is not a Technical Debt 主要是鲍勃大叔的观点 混乱的代码实现不是技术债 原文地址见超链接 The term Technical Debt was created
  • 成功解决安装tensorflow,安装进度1/4,爆红一大片且有很多File出现timed out

    之前安装几次 CPU tensorflow总是出现一大片红 自己发现其中一个原因是python版本和tensorflow不对应 tensorflow 2 0 0 得和python3 5 3 7对应 我之前的版本是3 8 5 会出现不兼容情况
  • 银行定期存款产品目标客户的确定——基于逻辑回归

    本篇文章将会介绍用Python分析银行定期存款产品目标客户的确定详细建模细节 业务框架分析以及模型的选择与评估分析参见上一篇文章 银行定期存款产品目标客户的确定 基于逻辑回归 建模前分析 1 导入各种模块并读取数据 2 数据预处理 维规约
  • STM32 keil中__IO得意思

    IO解释 STM32得库函数中 HAL和LL库都有 存在一个 IO得宏定义 define I volatile const lt defines read only permissions define O volatile lt defi
  • STM32配置时钟系统流程(固件库/外设标准库)

    前提 STM32F10x系列固件库 标准外设库 前言 固件库帮我们写好了 时钟系统 时钟树 的配置函数 该函数也不需要我们去调用 只要正确包含了STM32的启动文件 s文件 就行 s启动文件调用执行了时钟配置函数 先于main函数执行 s启
  • “钢铁侠”大战“机器人”!马斯克称「笼中格斗」将在 X 上直播,小扎应战:8 月 26 日如何?...

    由马斯克和扎克伯格领衔 随后引爆全网讨论的 约架 已过去快两个月 先是约定在拉斯维加斯来一场 笼中格斗 接着网友看热闹不嫌事大的做起了预告海报 最后由马斯克母亲出面叫停 当大家以为格斗一事要不了了之时 马斯克再次发声 要打 准备在 X 上直
  • 【Android】拾物App期末作业

    一 期末作业题目 校园失物 拾物APP 二 实施目的 通过本实训 使受训者可以深入理解Android相关技术 并将所学知识应用到实际的中等规模的程序设计中 同时 通过本实训 受训者可以拓展Android相关的知识 提升受训者的能力 三 实施
  • java中JDK JRE JVM的关系

    1 1 软件开发介绍 程序是为了模拟现实世界 解决显示问题而使用计算机语言编写的一系列有序的指令集合 软件 即一系列按照特定顺序组织的计算机数据和指令集合 有系统软件和应用软件之分 人机交互方式 图形化界面 GUI 命令行方式 CLI 常用
  • IO作业day5

    1 gt 使用两个线程完成两个文件的拷贝 主线程拷贝前一半内容 子线程拷贝后一半内容 并且主线程要阻塞回收子线程资源 2 gt 使用三个进程完成两个文件的拷贝 主线程拷贝前三分之一 子线程1拷贝中间三分之一 子线程2拷贝后三分之一 主线程要
  • 使用 Android 开发 MQTT 客户端

    MQTT 代表消息队列遥测传输 它是一种功能强大的消息传输协议 主要用于机器对机器 M2M 和物联网 IoT 通信上下文 MQTT 在这些情况下是首选 因为它易于实施 并且非常适合资源有限的设备 在本文中 我们将开发一个使用 MQTT 协议