C#MQTT编程01--MQTT介绍

1、前言

        近年来物联网的发展如火如荼已经渗透到我们生活的方方面面。从智能家居到工业自动化从智慧城市到智慧农业物联网,正在以前所未有的速度改变着我们的生活。 大家现在可能已经习惯了通过手机控制家里的灯光、空调和电视,这就是物联网在智能家居领域的应用,如果在10年前看到这种设备的应用肯定觉得很牛批,而现在只要是个设备都能上云这种家电设备的远程控制,已经成了大家习以为常的配置了。而在工业领域物联网技术可以帮助企业实现自动化生产、设备监控和预防性维护提高生产效率和产品质量。在智慧城市建设中物联网技术可以用于交通管理、环境监测和公共安全等方面提升城市管理和居民生活的质量。 在物联网、工业互联网,智慧城市,智能家居、智能设备、移动应用等方面的广泛应用,就离开不MQTT协议。

2、MQTT协议简介

        通信协议MQTT(Message Queuing Telemetry Transport)是一种轻量级的通信协议,被广泛应用于物联网和分布式系统中。它以其简单、可靠和高效的特性而备受推崇,成为连接设备和应用程序的首选协议。MQTT的重要性不言而喻,它为实时通信提供了可靠的解决方案,使得设备之间的数据交换和控制变得更加便捷。 MQTT广泛应用于工业物联网、智能家居、各类智能制造或各类自动化场景等。MQTT是一个基于客户端-服务器的消息发布/订阅传输协议,MQTT协议由于其用极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务,具有开销低、占用带宽低、即时通讯等优点,它具有以下主要特性:

1. 发布/订阅模式:MQTT采用发布/订阅模式,其中消息发布者(Publisher)将消息发布到特定的主题(Topic),而订阅者(Subscriber)通过订阅特定的主题来接收消息。

2. 主题(Topic):主题是MQTT消息的分类标识,类似于消息的目的地。发布者将消息发布到特定的主题,而订阅者通过订阅特定的主题来接收与该主题相关的消息。

3. 消息质量等级(QoS):MQTT定义了三个消息质量等级:QoS 0(最多一次)、QoS 1(至少一次)和QoS 2(只有一次)。发布者和订阅者可以根据需求选择适当的QoS级别。

4. 保留消息(Retained Message):发布者可以选择发布一个保留消息,该消息将被存储在MQTT代理服务器上,并在有订阅者订阅该主题时发送给订阅者。

5. 遗嘱消息(Will Message):发布者可以设置一个遗嘱消息,当发布者异常断开连接时,MQTT代理服务器会将遗嘱消息发送给订阅者。

6. 连接和会话:MQTT客户端通过与MQTT代理服务器建立连接来进行通信。客户端可以选择保持连接以维护会话状态,并在重新连接时恢复之前的会话。

7. 低带宽和资源消耗:MQTT协议设计为轻量级,具有较低的带宽和资源消耗。它适用于低带宽和不稳定的网络环境,如物联网设备和传感器网络。

       
     MQTT是IBM开发的即时通讯协议,物联网通信的主流协议之一。该协议支持所有平台,几乎可以把所有联网物品和外部连接起来,被用来当做传感器和制动器的通信协议。MQTT协议的底层是基于TCP/IP协议。 

       以下几张图说明MQTT的角色地位: 

 

3、MQTT协议原理 

实现MQTT协议需要客户端和服务器端通讯完成,也就是说它是一种客户端/服务器模型,即CS模型,在通信过程中,一个是服务器,一个是客户端,在通讯过程中,MQTT协议中有三种身份:发布者(Publish)、代理(Broker)、订阅者(Subscribe)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者,也就是说客户端可以是订阅者,也可以是发布者,MQTT传输的消息分为:主题(Topic)和负载(Payload)两部分:

Topic,可以理解为消息的类型,订阅者订阅(Subscribe)后,就会收到该主题的消息内容(payload),服务器会将消息发送给订阅所匹配标签的每个客户端。
Payload,可以理解为消息的内容,是指订阅者具体想要的内容。

MQTT会构建底层网络传输:它将建立客户端到服务器的连接,提供两者之间的一个有序的、无损的、基于字节流的双向传输,当应用数据通过MQTT网络发送时,MQTT会把与之相关的服务质量(QoS)和主题名(Topic)相关连。

MQTT是一个基于客户端-服务器的消息发布/订阅传输协议,那么作为客户端可以:

  • 发布其他客户端订阅的信息;
  • 订阅其它客户端发布的消息;
  • 退订或删除应用程序的消息;
  • 断开与服务器连接。

MQTT服务器以称为"消息代理"(Broker),可以是一个应用程序或一台设备。它位于消息发布者和订阅者之间,它可以:

  • 接受来自客户的网络连接;
  • 接受客户发布的应用信息;
  • 处理来自客户端的订阅和退订请求;
  • 向订阅的客户转发应用程序消息。

 它们的组成示意图:

发布订阅模式(Publish-Subscribe Pattern)是一种消息传递模式,它将发送消息的客户端(发布者)与接收消息的客户端(订阅者)解耦,使得两者不需要建立直接的联系也不需要知道对方的存在。

MQTT发布/订阅模式的精髓在于由一个被称为代理(Broker)的中间角色负责所有消息的路由和分发工作,发布者将带有主题的消息发送给代理,订阅者则向代理订阅主题来接收感兴趣的消息。

  • 发布者(Publisher)

负责将消息发布到主题上,发布者一次只能向一个主题发送数据,发布者发布消息时也无需关心订阅者是否在线。

  • 订阅者(Subscriber)

订阅者通过订阅主题接收消息,且可一次订阅多个主题。MQTT还支持通过共享订阅的方式在多个订阅者之间实现订阅的负载均衡。

  • 代理(Broker)

负责接收发布者的消息,并将消息转发至符合条件的订阅者。另外,代理也需要负责处理客户端发起的连接、断开连接、订阅、取消订阅等请求。

4、MQTT协议结构

在MQTT协议中,一个MQTT数据包由:固定头(Fixed header)、可变头(Variable header)、消息体(payload)三部分构成。

固定头(Fixed header):存在于所有MQTT数据包中,表示数据包类型及数据包的分组类标识。
可变头(Variable header):存在于部分MQTT数据包中,数据包类型决定了可变头是否存在及其具体内容。
消息体(Payload):存在于部分MQTT数据包中,表示客户端收到的具体内容。

本系列博客文章就以C#作为开发语言,一步步紧致如初地分析MQTT协议,以实现应用层软件开发,让屌丝逆袭飞起来。

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

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

相关文章

完美解决报错Please verify that the package.json has a valid “main“ entry处理方法

出现下图中的错误 ,说明缺少main入口 解决方法: 1.删除 node_modules 和 package-lock.json这两个文件 2.命令行输入npm i 会重新下载包 3.重新执行检查没有报错

QT常见组件

Qt 提供了非常丰富的图形用户界面(GUI)组件,这些组件可以按照功能和用途进行分类。由于Qt库的组件众多且不断更新,以下是一份大致分类及其包含的部分组件示例,并非所有Qt版本或模块都包括以下全部控件,但涵…

01循环算法

1.求小数点的某一位&#xff0c;且超出float和double的精度问题 【题目描述】 分数a/b化为小数后&#xff0c;小数点后第n位的数字是多少&#xff1f; 【输入】 三个正整数a&#xff0c;b&#xff0c;n&#xff0c;相邻两个数之间用单个空格隔开。0<a<b<100&#…

组织管理开源项目邀请入伙

背景 企业数字化平台基础 企业数字化或者信息化&#xff08;这两者有一些区别&#xff09;实施过程中&#xff0c;基本上一个系统、产品的实施、上线都可能会碰到组织人员集成问题&#xff0c;组织机构一般组织机构部门&#xff0c;岗位&#xff0c;人员&#xff0c;可能会有…

【微信小程序独立开发2】授权登录 上

前言&#xff1a;这一节设想完成的功能为进入小程序后请求授权信息&#xff0c;用户授权登录后&#xff0c;弹出宠物登记页面&#xff0c;并根据宠物类型播放背景音乐 小程序昵称头像在之前的版本获取规则为触发后弹出用户授权弹窗&#xff0c;授权后可直接获取用户头像和昵称&…

使用 CMake 和 Ninja 构建 C/C++ 项目的教程

使用 CMake 和 Ninja 构建 C/C 项目的教程 CMake 是一个跨平台的开源构建工具&#xff0c;它简化了项目的构建过程。而 Ninja 是一个快速、轻量级的构建系统&#xff0c;与 CMake 配合使用可以提高项目的构建效率。本教程将向你介绍如何使用 CMake 和 Ninja 来构建你的 C/C 项…

设计模式:简单工厂、工厂方法、抽象工厂的区别

设计模式&#xff1a;简单工厂、工厂方法、抽象工厂的区别 简单工厂模式&#xff08;Simple Factory Pattern&#xff09; 描述&#xff1a; 简单工厂模式并不是严格意义上的设计模式&#xff0c;而更像是一种编程习惯或者说是一种创建对象的简单方式。它使用一个工厂类来创建…

SQL_DQL_执行顺序

SELECT 字段列表 4 1 FROM 表名列表 1 WHERE 条件列表 &#xff08;可以有多个条…

金融科技革命:数字化如何塑造未来经济_光点科技

当今世界&#xff0c;数字化不仅是一种趋势&#xff0c;更是深刻重塑经济和金融领域的关键力量。在这个过程中&#xff0c;金融科技&#xff08;FinTech&#xff09;崭露头角&#xff0c;成为革命性变化的代名词。以下是数字化技术在经济和金融领域的几个关键应用&#xff0c;它…

YOLOv5独家原创改进:多层次特征融合(SDI)结合PConv、DualConv、GSConv,实现二次创新 | UNet v2最新论文

💡💡💡本文独家改进:多层次特征融合(SDI)高效结合DualConv、PConv、GSConv等实现二次创新 1)替代原始的Concat; 收录 YOLOv5原创自研 https://blog.csdn.net/m0_63774211/category_12511931.html 💡💡💡全网独家首发创新(原创),适合paper !!! 💡�…

LC1049. 最后一块石头的重量 II

代码随想录 class Solution {public int lastStoneWeightII(int[] stones) {int sum 0;for(int i : stones){sum i;}int target sum >> 1;int []dp new int[target1];for(int i 0 ; i < stones.length; i ){for(int j target ; j > stones[i] ; j --){dp[j] …

高度自适应scroll-view,uniapp项目

中间粉红的区域高度自适应,不管换什么机型&#xff0c;高度都自适应 <template><!-- 合同-待确认 --><view class"viewport"><!-- 上 --><view class"top-box"><!-- tab --><view class"tabs"><te…

C++八股——STL相关

C的STL&#xff08;Standard Template Library&#xff0c;标准模板库&#xff09;包括以下六大主要组件&#xff1a; 容器&#xff08;Containers&#xff09;&#xff1a; vector&#xff1a;动态数组&#xff0c;支持随机访问和高效内存管理。 list&#xff1a;双向链表&a…

美国PPI降温影响深远,美易平台展望金融市场新动向

近期&#xff0c;美国生产者价格指数&#xff08;PPI&#xff09;的最新数据显示出超出市场预期的降温迹象&#xff0c;这一变化对全球金融市场产生了深远的影响。据美国劳工部1月12日周五公布的数据&#xff0c;12月份的PPI同比增长1%&#xff0c;不仅低于预期的1.3%&#xff…

HTML5+CSS3+JS小实例:音频可视化

实例:音频可视化 技术栈:HTML+CSS+JS 效果: 源码: 【HTML】 <!DOCTYPE html> <html lang="zh-CN"> <head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><m…

C++学习笔记——私有继承、多重继承、类模板

目录 一、私有继承 二、多重继承 三、类模板 四、一个使用私有继承的示例代码 4.1代码 4.2输出结果 五、多重继承案列 六、类模板案例 C中的继承和模板是非常强大和灵活的特性&#xff0c;它们可以帮助我们实现代码复用、抽象和泛化等目标。本文将着重介绍私有继承、多…

class_1:qt的安装及基本使用方式

一、选择组件&#xff1a; 1、windows编译工具&#xff1a;MinGW 7.30 32-bit MinGW 7.30 64-bit 2、QT源代码&#xff1a;sources 3、QT的绘图模块&#xff1a;QT charts 4、QT虚拟键盘&#xff1a;QT Virtual Keyboard 5、QT Creational 4.12.2 GDB 二、新建QT项目 文…

Linux完全卸载Anaconda3和MiniConda3

如何安装Anaconda3和MiniConda3请看这篇文章&#xff1a; 安装Anaconda3和MiniConda3_minianaconda3-CSDN博客文章浏览阅读474次。MiniConda3官方版是一款优秀的Python环境管理软件。MiniConda3最新版只包含conda及其依赖项如果您更愿意拥有conda以及超过720个开源软件包&…

高通平台开发系列讲解(USB篇)adb function代码分析

文章目录 一、FFS相关动态打印二、代码入口三、ffs_alloc_inst四、ep0、ep1&ep2的注册五、读写过程沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本文主要介绍高通平台USB adb function代码f_fs.c。 一、FFS相关动态打印 目录:msm-4.14/drivers/usb/gadget/fun…

docker+jmeter实现windows作为主控机,linux作为负载机的分布式压测环境搭建

dockerjmeter实现windows作为主控机&#xff0c;linux作为负载机的分布式压测环境搭建 1、搭建环境说明2、windows主控机安装Jmeter3、linux负载机安装Jmeter3.1、安装docker环境3.2、使用docker安装jmeter 4、windows主控机分发测试任务 1、搭建环境说明 准备一台windows主机…