翼度科技»论坛 编程开发 .net 查看内容

在.NET7中使用MQTTnet简单实现MQTT通信

7

主题

7

帖子

21

积分

新手上路

Rank: 1

积分
21
一、MQTT简介
MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息传输协议,主要用于物联网设备间的通信。MQTT协议采用客户端/服务器架构,支持发布/订阅模式和点对点模式,具有高效、可靠、灵活等优点。
MQTT协议主要由三个要素构成:发布者(publisher)、代理服务器(broker)和订阅者(subscriber)。发布者将消息发布到代理服务器上,订阅者从代理服务器中订阅消息,代理服务器将消息发送给订阅者。MQTT协议中还有一个重要的概念是主题(topic),主题用于定义消息的类型和内容,发布者可以将消息发布到一个或多个主题上,订阅者可以订阅一个或多个主题的消息。
MQTT协议可以在不可靠的网络上以低带宽传输大量消息,适用于各种类型的物联网应用,例如智能家居、车联网、工业物联网等。由于其轻量级、可靠性高、快速响应等优点,MQTT协议在物联网领域得到了广泛的应用。
二、MQTTnet简介
MQTTnet 是一个跨平台、高性能和开源的 MQTT 客户端库和服务端实现,是 .NET 平台上主流的 MQTT 实现之一。基于 MQTTnet,用户可以方便地在 .NET 平台上集成 MQTT 功能,实现 MQTT 协议的消息传输等功能。
源码地址:https://github.com/dotnet/MQTTnet
三、在.NET7中使用MQTTnet****
1、项目准备
首先创建两个.NET7控制台项目,用来简单实现发布消息订阅功能。一个项目为服务端,一个客户端。
然后安装MQTTnet 包,我们这里选择安装3.12版本,MQTTnet跨版本差距比较大。大家可以在Nuget包管理器里安装,也可以用命令安装。
  1. dotnet add package MQTTnet --3.12
复制代码
2、服务端代码编写
编写服务端代码,片段代码如下:
  1. public static async Task MQTTP()
  2.         {
  3.             var factory = new MqttFactory();
  4.             var client = factory.CreateMqttClient();
  5.             var options = new MqttClientOptionsBuilder()
  6.                 .WithTcpServer("localhost", 1883)
  7.                 .Build();
  8.             await client.ConnectAsync(options);
  9.             while (true)
  10.             {
  11.                 Console.WriteLine("输入要发布的信息: ");
  12.                 var message = Console.ReadLine();
  13.                 var mqttMessage = new MqttApplicationMessageBuilder()
  14.                     .WithTopic("testTopic")
  15.                     .WithPayload(Encoding.UTF8.GetBytes(message))
  16.                     .WithExactlyOnceQoS()
  17.                     .Build();
  18.                 await client.PublishAsync(mqttMessage);
  19.             }
  20.         }
  21.     //调用
  22.     static async Task Main(string[] args)
  23.     {
  24.         #region 测试
  25.         await  MQTTP();
  26.         #endregion
  27.     }
复制代码
3、客户端代码编写
在客户端编写如下代码:
  1.   public static async Task MQTTClientTest()
  2.         {
  3.             var factory = new MqttFactory();
  4.             var client = factory.CreateMqttClient();
  5.             var options = new MqttClientOptionsBuilder()
  6.                 .WithTcpServer("localhost", 1883)
  7.                 .Build();
  8.             client.UseApplicationMessageReceivedHandler(e =>
  9.             {
  10.                 Console.WriteLine($"接收的消息: {Encoding.UTF8.GetString(e.ApplicationMessage.Payload)}");
  11.             });
  12.             await client.ConnectAsync(options);
  13.             await client.SubscribeAsync(new MqttTopicFilterBuilder().WithTopic("testTopic").Build());
  14.         }
  15.      //调用
  16.     static async Task Main(string[] args)
  17.     {
  18.         #region 测试
  19.         await MQTTClientTest();
  20.         #endregion
  21.     }
复制代码
这样就简单完成了发布订阅的功能,在这个示例中,发布者将消息发布到"testTopic"主题,订阅者订阅了相同的主题,一旦有新消息到达,就会打印出来。这只是一个简单的示例,实际的MQTT使用根据具体的项目场景来使用,比如异常处理等。
4、使用条件和方法:
首先在官网下载安装MQTT,官网为:https://mqtt.org/。
然后把项目的端口号改成mqtt配置的端口。同时运行两个项目就可以尝试了。大家可以拿上面代码尝试一下。
结语
本文介绍了MQTT在.NET7的简单使用,MQTT还有很多功能,大家可以根据MQTTnet 的API来使用其它功能。希望本文能对你带来收获,欢迎留言和吐槽。
  1. 来源公众号:DotNet开发跳槽
复制代码
来源:https://www.cnblogs.com/xbhp/archive/2023/04/10/17302548.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具