当前位置: 首页 > news >正文

MQTT是什么,物联网

写文思路:

以下从几个方面介绍MQTT,包括:MQTT是什么,MQTT和webSocket的结合,以及使用场景,

一、MQTT是什么

MQTT(Message Queuing Telemetry Transport)是一种轻量级的发布/订阅消息传输协议,广泛应用于物联网(IoT)设备之间的通信。

MQTT 在设计时考虑了低带宽、不可靠网络环境下的高效数据传输。

MQTT 可以通过 WebSocket 使用,从而在 Web 应用中实现实时消息传输。 

 

二、MQTT和webSocket的结合

链接:什么是webSocket点击跳转 

MQTT 原本是基于 TCP/IP 的协议,但为了适应 Web 应用的需求,MQTT 也可以通过 WebSocket 传输。

 

MQTT和webSocket的结合的好处:

  1. 在 Web 环境中的适用性

    • WebSocket 是 Web 环境中的标准双向通信协议,可以很容易地在浏览器中使用。结合 MQTT 和 WebSocket,浏览器客户端可以直接与 MQTT 代理(Broker)进行通信。
  2. 实时通信

    • MQTT 和 WebSocket 都支持实时通信,结合使用可以在 Web 应用中实现高效、低延迟的数据传输。
  3. 跨平台

    • 使用 WebSocket,MQTT 可以在各种平台(包括浏览器、移动设备和桌面应用)上使用,无需额外的网络库。

三、使用 MQTT over WebSocket 的场景

 将 MQTT 与 WebSocket 结合使用,可以在 Web 应用中实现高效、实时的消息传输,特别适用于需要实时数据更新的应用场景。MQTT 的发布/订阅模式与 WebSocket 的双向通信特性相结合,为开发者提供了强大而灵活的解决方案。

 

  • 实时物联网仪表盘

    • 在浏览器中显示实时物联网数据,例如传感器读数、设备状态等。
  • 在线聊天和通知

    • 在 Web 应用中实现实时聊天和推送通知。
  • 实时协作工具

    • 支持多个用户实时协作的 Web 应用,例如共同编辑文档、白板等。

四、如何在 Web 应用中使用 MQTT over WebSocket

以下是一个在 Web 应用中使用 MQTT over WebSocket 的示例:

1. 配置 MQTT 代理

首先,需要确保 MQTT 代理(Broker)支持 WebSocket。例如,使用 Mosquitto 代理,可以在配置文件中启用 WebSocket 支持:

listener 1883
protocol mqttlistener 8083
protocol websockets

2. 在 Web 应用中使用 MQTT.js 库

MQTT.js 是一个功能强大的 MQTT 客户端库,支持在 Node.js 和浏览器中使用。下面是一个简单的示例,展示如何在浏览器中使用 MQTT over WebSocket:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>MQTT over WebSocket Example</title><script src="https://cdnjs.cloudflare.com/ajax/libs/mqtt/4.2.6/mqtt.min.js"></script>
</head>
<body><h1>MQTT over WebSocket Example</h1><div><label for="message">Message:</label><input type="text" id="message"><button onclick="sendMessage()">Send</button></div><ul id="messages"></ul><script>// 连接到 MQTT 代理var client = mqtt.connect('ws://localhost:8083');// 当连接建立时触发client.on('connect', function () {console.log('Connected to MQTT broker');// 订阅主题client.subscribe('test/topic', function (err) {if (!err) {console.log('Subscribed to test/topic');}});});// 当接收到消息时触发client.on('message', function (topic, message) {// 将消息添加到页面var msg = document.createElement('li');msg.textContent = topic + ": " + message.toString();document.getElementById('messages').appendChild(msg);});// 发送消息function sendMessage() {var message = document.getElementById('message').value;client.publish('test/topic', message);}</script>
</body>
</html>

备注:

  • 引入 MQTT.js 库

    • 通过 CDN 引入 MQTT.js 库。
  • 连接到 MQTT 代理

    • 使用 mqtt.connect('ws://localhost:8083') 连接到启用了 WebSocket 的 MQTT 代理。
  • 订阅主题

    • 在连接建立后,订阅 test/topic 主题。
  • 接收消息

    • 通过 client.on('message', function (topic, message) { ... }) 处理接收到的消息,并将其显示在页面上。
  • 发送消息

    • 使用 client.publish('test/topic', message)test/topic 主题发送消息。

 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 微信小程序中wx.navigateBack()页面栈返回上一页时执行上一页的方法或修改上一页的data属性值
  • 【Sql Server修改列类型错误信息:对象名依赖于列】
  • Python从Excel表中查找指定数据填入新表
  • 对controller层进行深入学习
  • iOS 开发中,异步渲染和异步绘制
  • C++ | Leetcode C++题解之第225题用队列实现栈
  • java-数据库的作用
  • 记录Linux安装go环境的一个坑
  • CentOS 系统监控项
  • pnpm workspace使用教程【Monorepo项目】
  • linux之内存泄漏分析
  • 从零开始学习嵌入式----C语言框架梳理与后期规划
  • 哈斯机床采集数据
  • E. Beautiful Array(cf954div3)
  • 有必要找第三方软件测评公司吗?如何选择靠谱软件测评机构?
  • 《Javascript高级程序设计 (第三版)》第五章 引用类型
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • android 一些 utils
  • flask接收请求并推入栈
  • IDEA 插件开发入门教程
  • java8 Stream Pipelines 浅析
  • Javascript编码规范
  • JavaWeb(学习笔记二)
  • MD5加密原理解析及OC版原理实现
  • python学习笔记 - ThreadLocal
  • session共享问题解决方案
  • Vue全家桶实现一个Web App
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 类orAPI - 收藏集 - 掘金
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • 思考 CSS 架构
  • 吴恩达Deep Learning课程练习题参考答案——R语言版
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • 异步
  • #07【面试问题整理】嵌入式软件工程师
  • (4)事件处理——(7)简单事件(Simple events)
  • (二)PySpark3:SparkSQL编程
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (十一)手动添加用户和文件的特殊权限
  • .bat批处理(十一):替换字符串中包含百分号%的子串
  • .chm格式文件如何阅读
  • .md即markdown文件的基本常用编写语法
  • .net core控制台应用程序初识
  • .net 提取注释生成API文档 帮助文档
  • .NET 药厂业务系统 CPU爆高分析
  • .NET 中选择合适的文件打开模式(CreateNew, Create, Open, OpenOrCreate, Truncate, Append)
  • .netcore 6.0/7.0项目迁移至.netcore 8.0 注意事项
  • @PreAuthorize注解
  • @property @synthesize @dynamic 及相关属性作用探究
  • [ Linux 长征路第二篇] 基本指令head,tail,date,cal,find,grep,zip,tar,bc,unname
  • [ vulhub漏洞复现篇 ] struts2远程代码执行漏洞 S2-005 (CVE-2010-1870)
  • [<MySQL优化总结>]
  • [12] 使用 CUDA 进行图像处理
  • [AI StoryDiffusion] 创造神奇故事,AI漫画大乱斗!
  • [ai笔记9] openAI Sora技术文档引用文献汇总