使用 Android 开发 MQTT 客户端
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 代理
向代理发布主题
从代理订阅主题
断开连接
源代码
详情参阅 - 亚图跨际
使用 Android 开发 MQTT 客户端相关推荐
- android开发新浪微博客户端
android开发新浪微博客户端 完整攻略 [新手必读][转]2011-04-06 10:49:19 http://www.eoeandroid.com/forum-viewthread-tid-6 ...
- android开发新浪微博客户端 完整攻略 [新手必读]
android开发新浪微博客户端 完整攻略 [新手必读][转]2011-04-06 10:49:19 http://www.eoeandroid.com/forum-viewthread-tid-6 ...
- android开发新浪微博客户端 完整攻略 [新手必读][转]
开始接触学习android已经有3个礼拜了,一直都是对着android的sdk文档写Tutorials从Hello World到Notepad Tutorial算是初步入门了吧,刚好最近对微博感兴趣就 ...
- Android实现MQTT客户端
java代码 package com.example.myapplication;import androidx.appcompat.app.AppCompatActivity;import andr ...
- android开发新浪微博客户端 完整攻略
http://www.eoeandroid.com/forum-viewthread-tid-67298-fromuid-106432.html 开始接触学习android已经有3个礼拜了,一直都是对 ...
- 【转载】android开发新浪微博客户端 完整攻略
开始接触学习android已经有3个礼拜了,一直都是对着android的sdk文档写Tutorials从Hello World到Notepad Tutorial算是初步入门了吧,刚好最近对微博感兴趣就 ...
- 使用java开发MQTT客户端接收消息
1.搭建好MQTT服务器,可以参考EMQX企业版试用笔记_Three Big Stones的博客-CSDN博客 2.Eclipse下新建一个Maven项目,并引入mqtt客户端java版本包. < ...
- 使用mosquitto开发MQTT客户端
1. 下载并安装openSSL, mosquitto 应用程序运行时会用到 http://slproweb.com/products/Win32OpenSSL.html 2. 下载并安装mosquit ...
- android 启动新浪客户端,android开发新浪微博客户端
[实例简介] [实例截图] [核心代码] package weibo4andriod.examples; import java.io.*; import java.net.*; import wei ...
- Android开发资料
在移动开发如火如荼的今天,Android开发市场广阔,是目前市场占有率最高的智能手机操作系统.这个文档里整理110个优质的Android开发资料,网上的资料众多,参差不齐,然而这批资料却是经过精心整理 ...
最新文章
- U盘无法安全正常弹出和删除如何处理
- 第7课第2节_Binder系统_c++实现_编译测试
- 【caffe】基本数据结构blob
- C#迭代器、装箱/拆箱、重载等
- linux下gzip用法,Linux下tar和gzip命令的方法
- 308 permanent redirect怎么解决_赵县308国道一路口发生一起大货车与电动三轮车碰撞事故,电动三轮车驾驶人受伤。...
- 矩阵连乘 动态规划 详解
- java方法重载两个数相加_java方法重载实验:判断键盘输入的两个数据的类型后进行比较...
- php降序怎写,php 数组排序(升序、降序及相关问题)
- leetcode—24.堆题目leetcode总结
- C#中@字符的三个作用
- 区分Collection、Collector和collect Collectors类的静态工厂方法
- 向日葵 监控 android,就是如此简单!向日葵远程控制Android手机版教程
- Python 文字排版工具
- 学习Java. 基础 17: 二维数组
- 走进微软亚洲研究院随笔
- 美团饿了么外卖返利cps项目可以给你带来什么?
- 全球及中国载药微球经肝动脉化学栓塞术(DEB-TACE)在肿瘤学中的应用行业研究及十四五规划分析报告
- 【时间序列】自回归模型
- AspectJ 静态代理实践
热门文章
- CE修改器入门:查找共享代码
- Datalogic得利捷携突破性无线充电技术推出三款最新产品
- “坦克大战”小游戏(C语言)源代码及其详解注释
- MYSQL8.0 OCP考试题库(如需完整版请留言)
- chrome官网下载网址
- cisco 思科三层交换机配置命令
- 基于51单片机MAX6675 MAX1241的热电偶测温电机驱动系统proteus仿真 程序设计
- 2020年“华为杯”中国研究生数学建模竞赛题目及简单分析
- USB(UVC协议)摄像头
- 企业全面运营管理沙盘模拟心得_企业运营沙盘模拟心得体会