android mqtt(轻量级物联网消息推送)

MQTT是机器对机器(M2M)/物联网(IoT)连接协议。它被设计为一个极其轻量级的发布/订阅消息传输协议。对于需要较小代码占用空间和/或网络带宽非常宝贵的远程连接非常有用,是专为受限设备和低带宽、高延迟或不可靠的网络而设计。这些原则也使该协议成为新兴的“机器到机器”(M2M)或物联网(IoT)世界的连接设备,以及带宽和电池功率非常高的移动应用的理想选择。例如,它已被用于通过卫星链路与代理通信的传感器、与医疗服务提供者的拨号连接,以及一系列家庭自动化和小型设备场景。它也是移动应用的理想选择,因为它体积小,功耗低,数据包最小,并且可以有效地将信息分配给一个或多个接收器。

特点

  • 开放消息协议,简单易实现
  • 发布订阅模式,一对多消息发布
  • 基于TCP/IP网络连接,提供有序,无损,双向连接。
  • 1字节固定报头,2字节心跳报文,最小化传输开销和协议交换,有效减少网络流量。
  • 消息QoS支持,可靠传输保证

接下来主要应用于Android中的使用。

1.build.gradle中引入一下包,使项目能正常使用mqtt:

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

 2.设置mqtt连接服务器

//连接到服务器public void connectMQTT(String host, String port, String clientId, String userName, String token, IMqttActionListener callBack) {mMqttClient = new MqttAndroidClient(context, String.format("tcp://%s:%s", host, port), clientId);//连接参数MqttConnectOptions options;options = new MqttConnectOptions();//设置自动重连options.setAutomaticReconnect(true);// 缓存options.setCleanSession(true);// 设置超时时间,单位:秒options.setConnectionTimeout(300);// 心跳包发送间隔,单位:秒options.setKeepAliveInterval(45);// 用户名options.setUserName(userName);// 密码options.setPassword(token.toCharArray());options.setMqttVersion(MqttConnectOptions.MQTT_VERSION_3_1_1);// 设置MQTT监听mMqttClient.setCallback(new MqttCallback() {@Overridepublic void connectionLost(Throwable cause) {Log.d(TAG, "connectionLost: 连接断开");mqttListener.onConnectionLost(cause);}@Overridepublic void messageArrived(String topic, MqttMessage message) throws Exception {Log.d(TAG, "收到消息:" + message.toString());mqttListener.onMessageArrived(topic, message);}@Overridepublic void deliveryComplete(IMqttDeliveryToken token) {mqttListener.onDeliveryComplete(token);}});try {if (!mMqttClient.isConnected()) {//进行连接mMqttClient.connect(options, null, callBack);}} catch (MqttException e) {e.printStackTrace();}}

 3.订阅主题
 

public void subscribeMQTT(String topic, int qos, IMqttActionListener callBack) {try {//连接成功后订阅主题mMqttClient.subscribe(topic, qos, null, callBack);} catch (MqttException e) {e.printStackTrace();}}

4.取消订阅主题

public void unsubscribeMQTT(String topic, IMqttActionListener callBack) {try {mMqttClient.unsubscribe(topic, null, callBack);} catch (MqttException e) {e.printStackTrace();}}

5.发送消息

 public void sendMsg(String topic, String content, int qos, IMqttActionListener calBack) {MqttMessage msg = new MqttMessage();msg.setPayload(content.getBytes());//设置消息内容msg.setQos(qos);//设置消息发送质量,可为0,1,2.//设置消息的topic,并发送。try {if (mMqttClient.isConnected()) {mMqttClient.publish(topic, msg, null, calBack);}} catch (MqttException e) {e.printStackTrace();}}

 6.断开连接

public void disconnect() {if (mMqttClient != null && mMqttClient.isConnected()) {try {mMqttClient.disconnect();} catch (MqttException e) {e.printStackTrace();}}}

 7.添加监听事件

public void addMqttListener(MqttListener mqttListener) {this.mqttListener = mqttListener;}public interface MqttListener {void onSendMsgSuccess(IMqttToken asyncActionToken);void onSendMsgFailure(IMqttToken asyncActionToken, Throwable exception);void onConnectionLost(Throwable cause);void onMessageArrived(String topic, MqttMessage message);void onDeliveryComplete(IMqttDeliveryToken token);}

参考文献:MQTT 3.1.1 协议中文版 | MQTT中文网

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/842237.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

融资融券操作指南(附最低费率开户渠道)

部分朋友在开通融资融券后,对于融资融券的操作不是很熟练,并且存在很多问题。其实,融资融券核心就是一个“借”,你借券商的资金或者股票,看多时借入资金买入,看空时借入券源卖出。你不可能空口白牙的去借&a…

如何解决 Android Studio 长日志打印不全问题?

我们在开发过程中经常需要在控制台打印日志来进行调试,但是会发现日志内容过长的情况下,就无法完整的输出全部内容,这是因为 Log 日志最大长度为 4096 字节,超过这个长度的部分就无法显示。下面给出几个解决方案: 方式…

如何画泳道图?

一、绘制泳道图 1、新建一个绘图, 工具箱搜索“泳道图” 2、修改泳道图标题及风格 3、绘制基本的流程图 4、导出Visio格式 选择文件导出,visio格式

安全工程师考试摸拟试题

安全工程师考试摸拟试题安全工程师是指在工程项目中负责安全管理和安全技术服务的专业人员。他们需要具备扎实的理论知识和丰富的实践经验,能够有效预防和控制各类安全风险… 1 安全工程师考试摸拟试题 安全工程师是指在工程项目中负责安全管理和安全技术服务的专业…

实战14:粒子群算法pso优化机器学习集成学习进行数据预测-完整代码数据

视频演示: 效果演示: 主要代码: import numpy as np from sklearn.model_selection import train_test_split from sklearn.ensemble import GradientBoostingRegressor, AdaBoostRegressor from xgboost import XGBRegressor from lightgbm import LGBMRegressor from s…

MySQL|主从复制配置

我使用的是两个云服务器,如果读者使用的是虚拟机和本机,配置会简单很多。 关于云服务器安全组设置、防火墙端口等问题请参考文章: 使用华为云服务器进行项目部署(云服务器、防火墙配置) 条件:master 和 s…

Keras深度学习框架第二十八讲:可视化超参数调优过程

1、绪论 可视化超参数调优过程(Visualize the hyperparameter tuning process)指的是在机器学习或深度学习的模型训练中,通过图形化或可视化的方式展示和调整模型的超参数(hyperparameters)。这个过程有助于用户直观地…

SaaS增长三大策略:从用户获取到留存转化的全链路解析

在SaaS(软件即服务)行业中,增长是企业成功的关键。然而,要实现持续增长并非易事,需要一套从用户获取到留存转化的全链路策略。 首先,用户获取是SaaS增长的第一步。 这要求企业明确目标用户群体&#xff0…

【LeetCode】【9】回文数(1047字)

文章目录 [toc]题目描述样例输入输出与解释样例1样例2样例3 提示进阶Python实现 个人主页:丷从心 系列专栏:LeetCode 刷题指南:LeetCode刷题指南 题目描述 给一个整数x,如果x是一个回文整数,返回true;否…

C# VSTO读取Excel单元格Value、Value2

对单个单元格的值,需要用object 对象去接 object value (object)oneCellRange.Value; object value2 (object)oneCellRange.Value2; 对矩形范围的值,需要用object[,]去接 object[,] matrixValues (object[,])matrixRange.Value; object[,] matrixV…

centos 安装docker及docker-compose

安装docker yum install -y yum-utils yum-config-manager \--add-repo \http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum makecache fase yum install -y docker-ce docker-ce-cli containerd.io systemctl start docker systemctl enable docker dock…

【NumPy】关于numpy.sort()函数,看这一篇文章就够了

🧑 博主简介:阿里巴巴嵌入式技术专家,深耕嵌入式人工智能领域,具备多年的嵌入式硬件产品研发管理经验。 📒 博客介绍:分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方向…

MongoDB数据库清理策略: 自动化过期数据删除实战

1、引言 随着应用程序和业务数据的持续增长,有效地管理数据库存储空间成为维护系统性能的关键。在MongoDB这类NoSQL数据库中,定期清理过期数据变得尤为重要,这不仅能释放宝贵的存储资源,还能优化查询性能,确保数据库运…

Qt 对话框或者QMainWindow等类中调用自定义QWidget继承组件

简单的方法如下所示 1、创建一个ui文件,界面布局放入QVBoxLayout或者QHBoxLayout 使用他来放入自定义组件,类似如下 2、代码如下: ui.setupUi(this); { //自定义组价如下 KwTable *Table new KwTable(this); ui.vertical…

为什么要有NOC

如果是AHB,注意AXI并不真的定义了总线,更多是接口。 那么如何实现上面的带宽,延迟需求呢。 在异构,多时钟;大芯片,物理面积很大,延迟太长;片上系统,IP众多,总…

包装设计的七个秘诀

大家都知道,包装设计的好与坏不等于企业的好,但是消费者会有先入为主的想法,如果一个企业连包装设计都不重视,那么谁来重视产品质量呢?无可否认,对产品的评价首先是质量,但质量之后,…

【OpenVINO™】在C#中使用 OpenVINO™ 部署 YOLOv10 模型实现目标

文章目录 1. 前言1.1 OpenVINO™ C# API1.2 YOLOv10 2. 模型获取2.1 源码下载2.2 配置环境2.3 下载模型 3. Yolov10 项目配置3.1 项目创建与环境配置3.2 定义模型预测方法3.2.1 定义目标检测模型方法3.2.2 使用OpenVINO™ 预处理接口编译模型 3.2 模型预测方法调用 4. 项目运行…

文心智能体之情感领航员:你的智能情感导师

文章目录 引言情感领航员的诞生与定位情感领航员的优势与特点专业性个性化便捷性隐私保护 如何创建自己的智能体创建方式智能体名称和设定基础配置角色与目标指导原则限制澄清个性化 高级配置保存 /发布流量数据分析智能体调优 总结 引言 在现代社会中,情感问题的普…

[CISCN2024]-PWN:orange_cat_diary(glibc2.23.,仅可修改最新堆块,house of orange)

查看保护 查看ida 这里我们仅可以修改最新申请出来的堆块,但是有uaf漏洞。 完整exp: from pwn import* #context(log_leveldebug) pprocess(./orange) free_got0x201F78def alloc(size,content):p.sendlineafter(bPlease input your choice:,b1)p.send…

行转列——kettle开发14

一、行转列 如图所示,行转列就是把数据字段的字段名转换为一列,把数据行变成数据列。即我们将昨天输出的张三在周一至周日的工作小时转换为7行数据。对应7行数据分别为张三在周一工作多个小时,在周二工作多少个小时等等。 我们来看下行转列组…