1.什么是MQTT协议
MQTT 协议的全称是 Message Queuing Telemetry Transport,翻译为消息队列传输探测,它是 ISO 标准下的一种基于发布 - 订阅模式的消息协议,它是基于 TCP/IP 协议簇的,它是为了改善网络设备硬件的性能和网络的性能来设计的。MQTT 一般多用于 IoT 即物联网上,广泛应用于工业级别的应用场景,比如汽车、制造、石油、天然气等。
2.MQTT 协议优缺点
优点:
缺点:
3. MQTT client 和MQTT server 理解
1. MQTT client : 向server 订阅对应的主题消息内容,并获取到订阅的相关主题消息或者发布相关的主题消息给server。
2. MQTT server :主要用于与多个客户端保持连接,并处理client (客户端)的发布和订阅等逻辑。一般很少直接从server (服务端)发布消息给客户端(如果要发布消息,可以使用 mqttServer.Publish(appMsg); 直接发布消息给client),多数情况下server 都是转发client 已订阅主题消息给对应的client,在系统中起到一个中介的作用。
4.MQTT 协议与TCP/IP 协议的联系
实操部分
/*以下操作在.net6环境下。实操参考自 https://www.cnblogs.com/weskynet/p/16441219.html ,对mqtt感兴趣的同学可以去学习*/
创建.net core webApi 和 console 项目
下载nuget包
均安装 MQTTnet 最新版即可
创建服务端
创建一个类 继承 IHostedService和IDisposable并实现,我这里的类名是MqttHostService
在创建一个类,实现服务端发布方法
来到服务端Program 注册服务,代码如下:
这时回到创建的第一个类 创建类的构造函数 代码如下:
接着创建事件 如下:
这样我们服务端就创建好了,我们来解释一下:
来看Program
第一句话是注册一个直译 “主持服务” 的对象。对象类型为我们第一个创建的类。Nuget包下载后大多都需要在Program中完成注册使用服务,有时需要规定服务类型。
第二句话是添加一个单例对象,类型为MqttNet包提供的类型 叫 MqttServer
我们在其中使用lambda表达式给要使用本类型的对象提供默认服务端、端口号、最大连接数等并最终创建,返回。
来看MqttHostService 类,我们创建的第一个类,主要看开始方法
在开始方法中用 _mqttServer 字段 中服务于客户端连接的属性添加委托,添加委托用+=;
让我们运行一下。
运行成功后服务端控制台打印如下:
红框标注的是我们开启Mqtt服务后执行的事件,因为还没有客户端来连接,所以客户端连接事件未触发并未打印文字。
客户端创建(我选择的是控制台应用.Net8)
我这里创建了一个类 类名 ClientOne
类中内容如下:
来看Console中program ,代码如下:
让我们看一下这些代码的意思
客户端连接服务端方法
发布方法
订阅主题
Program中 执行的方法
执行一下:
服务端/客户端
键入后发布消息:服务端与客户端连接成功!
再复制ClientOne
修改里面的
运行之后clientTow是接收不到主题消息的。