热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MQTT通讯协议之MQTTnet

文章目录一、MQTT的概念二、MQTT应用场景三、MQTT的通信过程四、MQTT代码实现一、MQTT的概念MQTT协议的全称是MessageQueuingTelemetryTra


文章目录

      • 一、MQTT的概念
      • 二、MQTT应用场景
      • 三、MQTT的通信过程
      • 四、MQTT代码实现


一、MQTT的概念


  • MQTT 协议的全称是 Message Queuing Telemetry Transport,翻译为消息队列传输探测,它是 ISO 标准下的一种基于发布 - 订阅模式的消息协议,它是基于 TCP/IP 协议簇的,它是为了改善网络设备硬件的性能和网络的性能来设计的。

二、MQTT应用场景


  • MQTT 一般多用于 IoT 即物联网上,广泛应用于工业级别的应用场景,比如汽车、制造、石油、天然气等。

三、MQTT的通信过程


  • 角色
    • 客户端(Client)
      • 使用 MQTT 的程序或设备。客户端总是通过网络连接到服务端。它可以
        • 发布应用消息给其它相关的客户端。
        • 订阅以请求接受相关的应用消息
        • 取消订阅以移除接受应用消息的请求。
        • 从服务端断开连接。
    • 服务端(Server)
      • 一个程序或设备,作为发送消息的客户端和请求订阅的客户端之间的中介。服务端
        • 接受来自客户端的网络连接
        • 接受客户端发布的应用消息
        • 处理客户端的订阅和取消订阅请求。
        • 转发应用消息给符合条件的客户端订阅。
    • 订阅(Subscription)
      • 订阅包含一个主题过滤器(Topic Filter)和一个最大的服务质量(QoS)等级。订阅与单个会话
        (Session)关联。会话可以包含多于一个的订阅。会话的每个订阅都有一个不同的主题过滤器
  • 角色相关的术语
    • 主题名(Topic Name):
      附加在应用消息上的一个标签,服务端已知且与订阅匹配。服务端发送应用消息的一个副本给每一个匹配的客户端订阅。
    • 主题过滤器(Topic Filter:):
      订阅中包含的一个表达式,用于表示相关的一个或多个主题。主题过滤器可以使用通配符。
    • 会话(Session):
      客户端和服务端之间的状态交互。一些会话持续时长与网络连接一样,另一些可以在客户端和服务端的多个连续网络连接间扩展。
    • 控制报文(MQTT Control Packet):
      通过网络连接发送的信息数据包。MQTT 规范定义了十四种不同类型的控制报文,其中一个(PUBLISH 报 文)用于传输应用消息。

四、MQTT代码实现


  • 条件

    • JDK

    • MQTT服务端

      • 下载地址
        链接:https://pan.baidu.com/s/1uRBLZjkbS0OVbyM6lA9LnQ
        提取码:umt3
    • 客户端代码

  • 服务端安装

    • 执行命令

      #进入bin文件,执行命令apollo.cmd create [文件夹名称]#进入新建文件夹下bin文件夹,在执行命令apollo-broker.cmd run

  • 客户端代码实现

    • nuget 安装包

      MQTTnet

    • 代码实现
      • 发布

        Console.WriteLine("---------------MQTT客户端 通信开始------------");//建立连接var conn = new MqttFactory().CreateManagedMqttClient();IMqttClientOptions value = new MqttClientOptionsBuilder().WithClientId("MQTTClie").WithTcpServer("127.0.0.1",1883).WithCredentials("admin","123456").Build(); IManagedMqttClientOptions options = new ManagedMqttClientOptionsBuilder().WithClientOptions(value).Build(); await conn.StartAsync(options); //客户端发布 MqttApplicationMessage mqttApplicationMessage = new MqttApplicationMessageBuilder().WithTopic("server").WithPayload(Encoding.UTF8.GetBytes("Good Luck!")).Build();await conn.PublishAsync(mqttApplicationMessage);Console.WriteLine("---------------MQTT客户端 通信结束------------");Console.ReadLine();

      • 订阅

        Console.WriteLine("---------------MQTT客户端 通信开始------------");//建立连接var conn = new MqttFactory().CreateManagedMqttClient();IMqttClientOptions value = new MqttClientOptionsBuilder().WithClientId("MQTTClie").WithTcpServer("127.0.0.1",1883).WithCredentials("admin","123456").Build(); //响应订阅主题conn.ApplicationMessageReceivedHandler= new MqttApplicationMessageReceivedHandlerDelegate(e => {Console.WriteLine($"收到消息{e.ApplicationMessage.ConvertPayloadToString()},来自clientID{e.ClientId}");});IManagedMqttClientOptions options = new ManagedMqttClientOptionsBuilder().WithClientOptions(value).Build(); await conn.StartAsync(options);//订阅主题过滤器 MqttTopicFilter topicFilter = new MqttTopicFilterBuilder()//设置主题.WithTopic("server")//设置服务质量.WithQualityOfServiceLevel(MQTTnet.Protocol.MqttQualityOfServiceLevel.AtMostOnce).Build(); await conn.SubscribeAsync(topicFilter); Console.WriteLine("---------------MQTT客户端 通信结束------------");Console.ReadLine();

      • 既是发布也是订阅

        Console.WriteLine("---------------MQTT客户端 通信开始------------");//建立连接var conn = new MqttFactory().CreateManagedMqttClient();//响应订阅主题conn.ApplicationMessageReceivedHandler= new MqttApplicationMessageReceivedHandlerDelegate(e => {Console.WriteLine($"收到消息{e.ApplicationMessage.ConvertPayloadToString()},来自clientID{e.ClientId}");});await Task.Delay(1000);IMqttClientOptions value = new MqttClientOptionsBuilder().WithClientId("MQTTClie").WithTcpServer("127.0.0.1",1883).WithCredentials("admin","123456").Build(); IManagedMqttClientOptions options = new ManagedMqttClientOptionsBuilder().WithClientOptions(value).Build(); await conn.StartAsync(options);//订阅主题MqttTopicFilter topicFilter = new MqttTopicFilterBuilder()//设置主题.WithTopic("server")//设置服务质量.WithQualityOfServiceLevel(MQTTnet.Protocol.MqttQualityOfServiceLevel.AtMostOnce).Build();await conn.SubscribeAsync(topicFilter);//客户端发布 MqttApplicationMessage mqttApplicationMessage = new MqttApplicationMessageBuilder().WithTopic("server").WithPayload(Encoding.UTF8.GetBytes("Good Luck!")).WithRetainFlag (true) .Build();await conn.PublishAsync(mqttApplicationMessage);Console.WriteLine("---------------MQTT客户端 通信结束------------");Console.ReadLine();


推荐阅读
  • 本文详细介绍了Socket在Linux内核中的实现机制,包括基本的Socket结构、协议操作集以及不同协议下的具体实现。通过这些内容,读者可以更好地理解Socket的工作原理。 ... [详细]
  • 本文档详细介绍了Excel VBA编程中的基本语法,包括循环结构、条件判断、数据处理以及用户界面设计等内容,旨在帮助初学者快速掌握VBA编程技巧。 ... [详细]
  • 本文探讨了异步编程的发展历程,从最初的AJAX异步回调到现代的Promise、Generator+Co以及Async/Await等技术。文章详细分析了Promise的工作原理及其源码实现,帮助开发者更好地理解和使用这一重要工具。 ... [详细]
  • 入门指南:使用FastRPC技术连接Qualcomm Hexagon DSP
    本文旨在为初学者提供关于如何使用FastRPC技术连接Qualcomm Hexagon DSP的基础知识。FastRPC技术允许开发者在本地客户端实现远程调用,从而简化Hexagon DSP的开发和调试过程。 ... [详细]
  • 本文详细介绍了如何正确设置Shadowsocks公共代理,包括调整超时设置、检查系统限制、防止滥用及遵守DMCA法规等关键步骤。 ... [详细]
  • 本文将指导你如何通过自定义配置,使 Windows Terminal 中的 PowerShell 7 更加高效且美观。我们将移除默认的广告和提示符,设置快捷键,并添加实用的别名和功能。 ... [详细]
  • Qt应用开发:创建基本窗口
    本文介绍如何使用Qt框架创建基础窗口的两种方法。第一种方法直接在main函数中创建并显示窗口;第二种方法通过定义一个继承自QWidget的类来实现更复杂的功能。 ... [详细]
  • SecureCRT 使用指南与技巧
    本文详细介绍 SecureCRT 软件的基本功能,并分享了一些实用的操作技巧,旨在帮助用户提高远程管理效率。 ... [详细]
  • 本文介绍了一个基本的同步Socket程序,演示了如何实现客户端与服务器之间的简单消息传递。此外,文章还概述了Socket的基本工作流程,并计划在未来探讨同步与异步Socket的区别。 ... [详细]
  • 雨林木风 GHOST XP SP3 经典珍藏版 YN2014.04
    雨林木风 GHOST XP SP3 经典珍藏版 YN2014.04 ... [详细]
  • Hadoop集群搭建:实现SSH无密码登录
    本文介绍了如何在CentOS 7 64位操作系统环境下配置Hadoop集群中的SSH无密码登录,包括环境准备、用户创建、密钥生成及配置等步骤。 ... [详细]
  • java datarow_DataSet  DataTable DataRow 深入浅出
    本篇文章适合有一定的基础的人去查看,最好学习过一定net编程基础在来查看此文章。1.概念DataSet是ADO.NET的中心概念。可以把DataSet当成内存中的数据 ... [详细]
  • 本文详细介绍了如何在PHP中使用Memcached进行数据缓存,包括服务器连接、数据操作、高级功能等。 ... [详细]
  • 一家位于长沙的知名网络安全企业,现面向全国诚聘高级后端开发工程师,特别欢迎具有一线城市经验的技术精英回归故乡,共创辉煌。 ... [详细]
  • 本文探讨了有效学习专业技能的方法,包括编程语言、操作系统、软件组件及前沿技术的探索,旨在为初学者提供一套系统的自学指南。 ... [详细]
author-avatar
水儿本人_164
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有