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

MQTT协议介绍与应用

MQTT(MessageQueuingTelemetryTransport,消息队列遥测传输协议),是一种基于发布订阅&#x

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。



介绍

MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。官网链接

MQTT是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议,为此,它需要一个消息中间件,以解决当前繁重的资料传输协议,如:HTTP。

MQTT作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。
enter description here


特性

  1. 使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合。
  2. 对负载内容屏蔽的消息传输。
  3. 使用TCP/IP提供网络连接。
  4. 有三种消息发布服务质量:
    “至多一次”,消息发布完全依赖底层TCP/IP网络。会发生消息丢失或重复。
    “至少一次”,确保消息到达,但消息重复可能会发生。
    “只有一次”,确保消息到达一次。在一些要求比较严格的计费系统中,可以使用此级别。
  5. 小型传输,开销很小(固定长度的头部是2字节),协议交换最小化,以降低网络流量。
  6. 使用Last Will和Testament特性通知有关各方客户端异常中断的机制。
    Last Will:即遗言机制,用于通知同一主题下的其他设备发送遗言的设备已经断开了连接。
    Testament:遗嘱机制,功能类似于Last Will。

实现方式

实现MQTT协议需要客户端和服务器端通讯完成,在通讯过程中,MQTT协议中有三种身份:发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe)。
其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。

MQTT传输的消息分为:主题(Topic)和负载(payload)两部分:


  1. Topic,可以理解为消息的类型,订阅者订阅(Subscribe)后,就会收到该主题的消息内容(payload);
  2. payload,可以理解为消息的内容,是指订阅者具体要使用的内容。

客户端可以建立与服务器的连接,订阅主题、接受消息、发布消息等
服务器可以是一个应用程序或一台设备。用于接受来自客户端的网络连接,接受发布的消息、转发订阅相关主题的客户端的消息、等



应用


应用首先需要 MQTT服务器,其次需要客户端
然后要客户端跟服务器进行连接
连接之后就可以 订阅主题 收到该主题发布的信息 ,向特定主题发布信息



MQTT服务器安装


EMQ 是国人开发的 也挺好用的,能够支持连接量比较大的服务
mosquitto 是一个轻量级的服务器 比较小,但是学习也足够了



mqtt服务器 EMQ

(开源物联网 MQTT消息服务器)
EMQ提供了一个后端Web控制台,用户可通过 Web 控制台,查看服务器运行状态、统计数据、客户端(Client)、会话(Session)、主题(Topic)、订阅(Subscription)、插件(Plugin)。
链接

EMQ服务器在Windows搭建
到官网下载好相应版本 然后解压
使用命令行进入到解压路径下 输入


bin\emqttd.cmd start


enter description here
然后在浏览器中输入 http://127.0.0.1:18083 即可打开 (默认用户名admin 密码 public)
enter description here

在安装好服务器端之后,我们使用MQTT的客户端对MQTT服务器的基本功能进行相关的测试。MQTT客户端有不少,比如mosquito提供了命令行,通过命令行工具可以方便地进行测试;最简单的方式可能还是通过可视化的界面对其进行测试,比如MQTTBox


mqtt服务器 mosquitto

一款实现了消息推送协议 MQTT v3.1 的开源消息代理软件,提供轻量级的,支持可发布/可订阅的的消息推送模式
下载地址 http://mosquitto.org/download/
选择win64 版本
安装好之后再安装目录下 打开命令行输入


mosquitto.exe -v 开始运行


订阅主题 新建命令行窗口 输入命令


mosquitto_sub -v -t topicTest #-t后面是主题名称


发布信息 新建命令行窗口 输入命令


mosquitto_pub -t topicTest -m TEset # -m 后面是消息内容 -t 后面是发往的主题名


当发布信息后 订阅的主题将能够显示出来发布的内容
enter description here
如果关闭最先打开的窗口 则无法发布消息
enter description here


Ubuntu端 安装使用mosquitto

打开mosquitto服务 sudo service mosquitto start
停止服务 sudo service mosquitto stop
本地的mqtt服务 订阅主题 mosquitto_sub -h localhost -t “mqtt” -v
发布消息 mosquitto_pub -h localhost -t “mqtt” -m “Hello2 MQTT”
公网的mqtt服务 如 test.mosquitto.org
订阅主题 mosquitto_sub -h test.mosquitto.org -t “msg_only_from_me” -v
发布消息到这个主题 mosquitto_pub -h test.mosquitto.org -t “msg_only_from_me” -m “My cat is Luna”
局域网内的mqtt服务器 (设备在同一WiFi下也是在同一局域网 Windows查ip命令 ipconfig Ubuntu查ip命令 ifconfig 可以使用ping ip的方法查看是否在同一局域网)
订阅主题 mosquitto_sub -h 192.168.43.211 -t ‘mqtt’ -v
发布消息 mosquitto_pub -h 192.168.43.211 -t ‘mqtt’ -m ‘hellddo’
enter description here
(同一局域网内 通过ip加端口可以访问到 该ip设备的服务)


客户端MQTTBox

Windows下载地址

enter description here
打开之后如果没有创建主题 会有一个create MQTT Client按钮


指定连接相关信息,包括连接名称(可以随意输入)、协议(选择mqtt/tcp)和主机地址(安装在本地,MQTT缺省端口为1883,所以输入127.0.0.1:1883)没有设置用户名密码 可以不填,然后单击“Save”保存


enter description here

下面就可以来测试消息发布和订阅了
enter description here =600*400
enter description here =600*400

相应的服务器端也会发生变化

如果使用的不是本地服务器 在host输入服务器的地址
如果服务器需要用户名密码 就在username输入用户名 password输入密码
enter description here


项目参考代码在下方

更多学习教程


ESP开发学习基础知识

基础知识包括对esp模块的认识与了解 mqtt协议的了解,arduino IDE运用代码编写等等。


  1. arduino基础学习
  2. esp系列模块的介绍
  3. mqtt协议的介绍与使用
  4. 利用mqtt esp模块 基于arduino IDE开发方法
  5. esp模块的AT指令 刷固件
  6. esp模块睡眠模式使用
  7. esp8266-01s介绍与使用
  8. esp8266-12f介绍与使用
  9. NodeMcu介绍与使用

esp开发IOT应用

基于esp8266的模块以及其他模块根据实际的应用场景与需求制作的物联网应用


  1. 基于FRID arduino 继电器 电磁锁开发的FRID门禁系统
  2. esp32-cam获取视频流图像处理
  3. 基于步进电机 esp8266 mqtt开发的自动窗帘控制
  4. 基于DHT11 Esp8266 mqtt获取室内温湿度
  5. 基于CCS811 esp8266 mqtt 获取室内空气质量
  6. 基于红外模块 esp8266 mqtt开发的智能遥控控制
  7. 基于ws2812 esp8266 mqtt开发的智能多级照明灯
  8. 基于ws2812 esp8266 mqtt开发的智能多模式氛围灯
  9. 基于mp3player esp8266 mqtt开发的智能语音播报系统
  10. IOT综合应用之智慧教室项目开发

如果以上内容对你有帮助或是对IOT开发感兴趣,欢迎关注我。

本人接下来一段时间承接人脸图像处理,IOT开发等相关项目(毕设 比赛等)
有需要可联系qq:1639206518

GitHub代码地址

如果文章有帮助到你,关注 点赞 收藏!


推荐阅读
  • 小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限
    小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限 ... [详细]
  • SecureCRT是一款功能强大的终端仿真软件,支持SSH1和SSH2协议,适用于在Windows环境下高效连接和管理Linux服务器。该工具不仅提供了稳定的连接性能,还具备丰富的配置选项,能够满足不同用户的需求。通过SecureCRT,用户可以轻松实现对远程Linux系统的安全访问和操作。 ... [详细]
  • 本文介绍了如何利用HTTP隧道技术在受限网络环境中绕过IDS和防火墙等安全设备,实现RDP端口的暴力破解攻击。文章详细描述了部署过程、攻击实施及流量分析,旨在提升网络安全意识。 ... [详细]
  • 您的数据库配置是否安全?DBSAT工具助您一臂之力!
    本文探讨了Oracle提供的免费工具DBSAT,该工具能够有效协助用户检测和优化数据库配置的安全性。通过全面的分析和报告,DBSAT帮助用户识别潜在的安全漏洞,并提供针对性的改进建议,确保数据库系统的稳定性和安全性。 ... [详细]
  • DVWA学习笔记系列:深入理解CSRF攻击机制
    DVWA学习笔记系列:深入理解CSRF攻击机制 ... [详细]
  • 为了确保iOS应用能够安全地访问网站数据,本文介绍了如何在Nginx服务器上轻松配置CertBot以实现SSL证书的自动化管理。通过这一过程,可以确保应用始终使用HTTPS协议,从而提升数据传输的安全性和可靠性。文章详细阐述了配置步骤和常见问题的解决方法,帮助读者快速上手并成功部署SSL证书。 ... [详细]
  • 如何在Windows 7系统中配置和设置无线路由器?
    随着无线设备的普及,如智能手机和平板电脑,WiFi已成为日常生活中的必备功能。许多家庭拥有无线路由器,但不清楚如何正确设置。本文将详细介绍如何在Windows 7系统中配置和设置无线路由器,帮助用户轻松实现稳定高效的无线网络连接。 ... [详细]
  • 本文详细介绍了一种利用 ESP8266 01S 模块构建 Web 服务器的成功实践方案。通过具体的代码示例和详细的步骤说明,帮助读者快速掌握该模块的使用方法。在疫情期间,作者重新审视并研究了这一未被充分利用的模块,最终成功实现了 Web 服务器的功能。本文不仅提供了完整的代码实现,还涵盖了调试过程中遇到的常见问题及其解决方法,为初学者提供了宝贵的参考。 ... [详细]
  • 在探讨Hibernate框架的高级特性时,缓存机制和懒加载策略是提升数据操作效率的关键要素。缓存策略能够显著减少数据库访问次数,从而提高应用性能,特别是在处理频繁访问的数据时。Hibernate提供了多层次的缓存支持,包括一级缓存和二级缓存,以满足不同场景下的需求。懒加载策略则通过按需加载关联对象,进一步优化了资源利用和响应时间。本文将深入分析这些机制的实现原理及其最佳实践。 ... [详细]
  • PHP自学必备:从零开始的准备工作与工具选择 ... [详细]
  • 本文详细介绍了如何在 Linux 系统上安装 JDK 1.8、MySQL 和 Redis,并提供了相应的环境配置和验证步骤。 ... [详细]
  • 在 CentOS 6.4 上安装 QT5 并启动 Qt Creator 时,可能会遇到缺少 GLIBCXX_3.4.15 的问题。这是由于系统中的 libstdc++.so.6 版本过低。本文将详细介绍如何通过更新 GCC 版本来解决这一问题。 ... [详细]
  • 本文详细介绍了在 Ubuntu 系统上搭建 Hadoop 集群时遇到的 SSH 密钥认证问题及其解决方案。通过本文,读者可以了解如何在多台虚拟机之间实现无密码 SSH 登录,从而顺利启动 Hadoop 集群。 ... [详细]
  • 解决Parallels Desktop错误15265的方法
    本文详细介绍了在使用Parallels Desktop时遇到错误15265的多种解决方案,包括检查网络连接、关闭代理服务器和修改主机文件等步骤。 ... [详细]
  • 深入解析 OpenSSL 生成 SM2 证书:非对称加密技术与数字证书、数字签名的关联分析
    本文深入探讨了 OpenSSL 在生成 SM2 证书过程中的技术细节,重点分析了非对称加密技术在数字证书和数字签名中的应用。非对称加密通过使用公钥和私钥对数据进行加解密,确保了信息传输的安全性。公钥可以公开分发,用于加密数据或验证签名,而私钥则需严格保密,用于解密数据或生成签名。文章详细介绍了 OpenSSL 如何利用这些原理生成 SM2 证书,并讨论了其在实际应用中的安全性和有效性。 ... [详细]
author-avatar
j7988l28
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有