iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >MQTT.js入门使用的方法是什么
  • 416
分享到

MQTT.js入门使用的方法是什么

2023-07-06 04:07:08 416人浏览 薄情痞子
摘要

这篇文章主要介绍“MQTT.js入门使用的方法是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“MQtT.js入门使用的方法是什么”文章能帮助大家解决问题。简介MQTT.js 是一个开源

这篇文章主要介绍“MQTT.js入门使用的方法是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“MQtT.js入门使用的方法是什么”文章能帮助大家解决问题。

    简介

    MQTT.js 是一个开源的 MQTT 协议的客户端库,使用 javascript 编写,主要用于 node.js 和 浏览器环境中。是目前 JavaScript 生态中使用最为广泛的 MQTT 客户端库。

    MQTT 是一种基于发布/订阅模式的轻量级物联网消息传输协议,可以用极少的代码和带宽为联网设备提供实时可靠的消息服务,它广泛应用于物联网、移动互联网、智能硬件、车联网、电力能源等行业。

    由于 JavaScript 单线程特性,MQTT.js 是全异步 MQTT 客户端,MQTT.js 支持 MQTT/tcp、MQTT/TLS、MQTT/websocket,在不同运行环境支持的度如下:

    注意:不同环境里除了少部分连接参数不同,其他 api 均是相同的。且在 MQTT.js v3.0.0 及以上版本后,已经完整支持到 MQTT 5.0。

    安装

    使用 npm 或 yarn 安装

    npm install mqtt --save# 或使用 yarnyarn add mqtt

    注意:如果您的 Node 环境是 v12 或 v14 及以上版本,请使用 MQTT.js 4.0.0 及以上版本

    使用 CDN 安装

    浏览器环境中,我们还可以使用 CDN 的方式引入 MQTT.js。MQTT.js 的 bundle 包通过 Http://unpkg.com 管理,我们可以直接添加 unpkg.com/mqtt/dist/mqtt.min.js 来进行使用。

    <script src="https://unpkg.com/mqtt/dist/mqtt.min.js"></script><script>  // 将在全局初始化一个 mqtt 变量  console.log(mqtt)</script>

    全局安装

    除了上述的安装方式外,MQTT.js 还提供了全局安装的方式,使用命令行工具来完成 MQTT 的连接、发布和订阅等。

    npm install mqtt -g

    我们会在下文中的一些使用教程中详细描述如何使用 MQTT.js 的命令行工具。

    使用

    本文将使用 EMQX Cloud 提供的 免费公共 MQTT 服务器 作为本次测试的 MQTT 服务器地址,服务器接入信息如下:

    • Broker: broker.emqx.io

    • TCP Port: 1883

    • SSL/TLS Port: 8883

    更多详情请访问 EMQX Cloud 官网,或查看 EMQX Cloud 文档。

    简单例子

    我们简单编写一段代码实现连接到 EMQX Cloud 并完成订阅主题、收发消息的简单例子。因为在浏览器环境中仅支持使用 WebSocket 连接,所以我们将使用在浏览器环境和 Node.js 环境两种不同的连接参数来完成连接。不过除连接地址外,其它参数均是相同的,因此读者可根据自己的实际情况选择使用。

    const mqtt = require('mqtt')const url = 'ws://broker.emqx.io:8083/mqtt'// const url = 'mqtt://broker.emqx.io:1883'// 创建客户端实例const options = {  // Clean session  clean: true,  connectTimeout: 4000,  // 认证信息  clientId: 'emqx_test',  username: 'emqx_test',  passWord: 'emqx_test',}const client = mqtt.connect(url, options)client.on('connect', function () {  console.log('Connected')  // 订阅主题  client.subscribe('test', function (err) {    if (!err) {      // 发布消息      client.publish('test', 'Hello mqtt')    }  })})// 接收消息client.on('message', function (topic, message) {  // message is Buffer  console.log(message.toString())  client.end()})

    命令行

    在全局安装完 MQTT.js 后,我们同样可以使用命令行工具来完成主题订阅消息发布接收的动作。

    示例连接到 broker.emqx.io 并订阅 testtopic/# 主题:

    mqtt sub -t 'testtopic/#' -h 'broker.emqx.io' -v

    示例连接到 broker.emqx.io 并向 testtopic/hello 主题发送消息

    mqtt pub -t 'testtopic/hello' -h 'broker.emqx.io' -m 'from MQTT.js'

    如需使用功能更加全面的 MQTT 命令行工具,可参考使用 MQTT X CLI。

    API 介绍

    mqtt.connect([url], options)

    连接到指定的 MQTT Broker 的函数,并始终返回一个 Client 对象。第一个参数传入一个 URL 值,URL 可以是以下协议:mqttmqttstcptlswswss。URL 也可以是一个由 URL.parse() 返回的对象。然后再传入一个 Options 对象,用于配置 MQTT 连接时的选项。当使用 WebSocket 连接时需要注意地址后是否需要加上一个 path,例如 /mqtt

    下面列举一些常用的 Options 对象中的属性值:

    • Options

      • topic: 遗嘱发送的 Topic

      • payload: 遗嘱发布的消息

      • QoS: 遗嘱发送的 QoS 值

      • retain: 遗嘱发布的消息的 retain 标志

      • keepalive: 单位为,数值类型,默认为 60 秒,设置为 0 时禁止

      • clientId: 默认为 'mqttjs_' + Math.random().toString(16).substr(2, 8),可以支持自定义修改的字符串

      • protocolVersion: MQTT 协议版本号,默认为 4(v3.1.1)可以修改为 3(v3.1)和 5(v5.0)

      • clean: 默认为 true,是否清除会话。当设置为 true 时,断开连接后将清除会话,订阅过的 Topics 也将失效。当设置为 false 时,离线状态下也能收到 QoS 为 1 和 2 的消息

      • reconnectPeriod: 重连间隔时间,单位为毫秒,默认为 1000 毫秒,注意:当设置为 0 以后将取消自动重连

      • connectTimeout: 连接超时时长,收到 CONNACK 前的等待时间,单位为毫秒,默认 30000 毫秒

      • username: 认证用户名,如果 Broker 要求用户名认证的话,请设置该值

      • password: 认证密码,如果 Broker 要求密码认证的话,请设置该值

      • will: 遗嘱消息,一个可配置的对象值,当客户端非正常断开连接时,Broker 就会向遗嘱 Topic 里面发布一条消息,格式为:

      • properties: MQTT 5.0 新增,可配置的对象的属性值,详情请参考:https://GitHub.com/mqttjs/MQTT.js#mqttclientstreambuilder-options

    • 如果需要配置 SSL/TLS 连接,Option 对象会被传递给 tls.connect() ,因此可以在 option 中配置以下属性

      • rejectUnauthorized: 是否验证服务端证书链和地址名称,设置为 false 时将跳过验证,会暴露在中间人的攻击之下,所以不建议在生产环境中使用这种配置,当设置为 true 时,将开启强认证模式,且如果是自签名证书,请在证书配置时设置 Alt name。

      • ca: 只有在服务器使用自签名证书时才有必要,自签名证书中生成的 CA 文件

      • cert: 只有当服务器需要客户证书认证时才有必要(双向认证),客户端证书

      • key: 只有当服务器需要客户证书认证时才有必要(双向认证),客户端密钥

    Client 事件

    当连接成功后,返回的 Client 对象可通过 on 方法监听多个事件,业务逻辑可在监听的回调函数中完成。以下列举一些常用的事件:

    connect

    当连接成功时触发,参数为 connack

    client.on('connect', function (connack) {  console.log('Connected')})

    reconnect

    当断开连接后,经过重连间隔时间重新自动连接到 Broker 时触发

    client.on('reconnect', function () {  console.log('Reconnecting...')})

    close

    在断开连接以后触发

    client.on('close', function () {  console.log('Disconnected')})

    disconnect

    在收到 Broker 发送过来的断开连接的报文时触发,参数 packet 即为断开连接时接收到的报文,MQTT 5.0 中的功能

    client.on('disconnect', function (packet) {  console.log(packet)})

    offline

    当客户端下线时触发

    client.on('offline', function () {  console.log('offline')})

    error

    当客户端无法成功连接时或发生解析错误时触发,参数 error 为错误信息

    client.on('error', function (error) {  console.log(error)})

    message

    当客户端收到一个发布过来的 Payload 时触发,其中包含三个参数,topic、payload 和 packet,其中 topic 为接收到的消息的 topic,payload 为接收到的消息内容,packet 为 MQTT 报文信息,其中包含 QoS、retain 等信息

    client.on('message', function (topic, payload, packet) {  // Payload is Buffer  console.log(`Topic: ${topic}, Message: ${payload.toString()}, QoS: ${packet.qos}`)})

    Client 方法

    Client 除监听事件外,也内置一些方法,用来进行发布订阅的操作等,以下列举一些常用的方法。

    Client.publish(topic, message, [options], [callback])

    向某一 topic 发布消息的函数方法,其中包含四个参数:

    // 向 testtopic 主题发送一条 QoS 为 0 的测试消息client.publish('testtopic', 'Hello, MQTT!', { qos: 0, retain: false }, function (error) {  if (error) {    console.log(error)  } else {    console.log('Published')  }})
    • topic: 要发送的主题,为字符串

    • message: 要发送的主题的下的消息,可以是字符串或者是 Buffer

    • options: 可选值,发布消息时的配置信息,主要是设置发布消息时的 QoS、Retain 值等。

    • callback: 发布消息后的回调函数,参数为 error,当发布失败时,该参数才存在

    Client.subscribe(topic/topic array/topic object, [options], [callback])

    订阅一个或者多个 topic 的方法,当连接成功需要订阅主题来获取消息,该方法包含三个参数:

    // 订阅一个名为 testtopic QoS 为 0 的 Topicclient.subscribe('testtopic', { qos: 0 }, function (error, granted) {  if (error) {    console.log(error)  } else {    console.log(`${granted[0].topic} was subscribed`)  }})
    • topic: 可传入一个字符串,或者一个字符串数组,也可以是一个 topic 对象,{'test1': {qos: 0}, 'test2': {qos: 1}}

    • options: 可选值,订阅 Topic 时的配置信息,主要是填写订阅的 Topic 的 QoS 等级的

    • callback: 订阅 Topic 后的回调函数,参数为 error 和 granted,当订阅失败时 error 参数才存在, granted 是一个 {topic, qos} 的数组,其中 topic 是一个被订阅的主题,qos 是 Topic 是被授予的 QoS 等级

    Client.unsubscribe(topic/topic array, [options], [callback])

    取消订阅单个主题或多个主题,该方法包含三个参数:

    // 取消订阅名为 testtopic 的 Topicclient.unsubscribe('testtopic', function (error) {  if (error) {    console.log(error)  } else {    console.log('Unsubscribed')  }})
    • topic: 可传入一个字符串或一个字符串数组

    • options: 可选值,取消订阅时的配置信息

    • callback: 取消订阅时的回调函数,参数为 error,当取消订阅失败时 error 参数才存在

    Client.end([force], [options], [callback])

    关闭客户端,该方法包含三个参数:

    client.end()
    • force: 设置为 true 时将立即关闭客户端,而无需等待断开连接的消息被接受。这个参数是可选的,默认为 false。注意:使用该值为 true 时,Broker 无法接收到 disconnect 的报文

    • options: 可选值,关闭客户端时的配置信息,主要是可以配置 reasonCode,断开连接时的 Reason Code

    • callback: 当客户端关闭时的回调函数

    关于“MQTT.js入门使用的方法是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网精选频道,小编每天都会为大家更新不同的知识点。

    --结束END--

    本文标题: MQTT.js入门使用的方法是什么

    本文链接: https://www.lsjlt.com/news/357717.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • MQTT.js入门使用的方法是什么
      这篇文章主要介绍“MQTT.js入门使用的方法是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“MQTT.js入门使用的方法是什么”文章能帮助大家解决问题。简介MQTT.js 是一个开源...
      99+
      2023-07-06
    • MQTT.js入门使用教程
      目录简介安装使用 npm 或 yarn 安装使用 CDN 安装全局安装使用简单例子命令行API 介绍mqtt.connect([url], options)Client 事件Clie...
      99+
      2023-05-16
      MQTT.js 入门 MQTT.js 入门教程 MQTT.js使用
    • Python快速入门的方法是什么
      这篇文章主要介绍“Python快速入门的方法是什么”,在日常操作中,相信很多人在Python快速入门的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python快速入门的方法是什么”的疑惑有所帮助!...
      99+
      2023-06-17
    • php快速入门的方法是什么
      要快速入门PHP,可以按照以下步骤进行:1. 下载和安装PHP:首先,需要下载并安装PHP的最新版本。可以从PHP官方网站(http...
      99+
      2023-08-30
      php
    • 入门级的Git操作方法是什么
      这篇文章主要讲解了“入门级的Git操作方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“入门级的Git操作方法是什么”吧!导读Git是一个开源的分布式版本控制系统,可以有效、高速地处理...
      99+
      2023-06-03
    • Koa2框架快速入门与基本使用的方法是什么
      本篇内容介绍了“Koa2框架快速入门与基本使用的方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Koa2 是什么?简单来讲,它是一个...
      99+
      2023-07-05
    • vue3的mixin混入使用方法是什么
      本篇内容主要讲解“vue3的mixin混入使用方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“vue3的mixin混入使用方法是什么”吧!vue 2 中采用选项式API 如: ...
      99+
      2023-06-21
    • python入门之Tkinter使用的方法详解
      目录一、前言1.1、Tkinter是什么二、准备工作2.1、Windows演示环境搭建三、Tkinter创建窗口3.1、创建出一个窗口3.2、给窗口取一个标题3.3、窗口设置3.3、...
      99+
      2024-04-02
    • Python是什么?有什么用?怎么入门?
        🤵‍♂️ 个人主页:@艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 Ǵ...
      99+
      2023-09-13
      python 开发语言
    • perl数组放入哈希使用的方法是什么
      在Perl中,可以使用以下方法将数组放入哈希:1. 使用循环遍历数组,并将数组元素作为键或值添加到哈希中。例如:```perlmy ...
      99+
      2023-10-07
      perl
    • ubuntu中设置使用中文输入法的方法是什么
      本篇内容介绍了“ubuntu中设置使用中文输入法的方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Ubuntu可以在最新版本中使用,...
      99+
      2023-07-04
    • TKMybatis的使用方法是什么
      本篇内容介绍了“TKMybatis的使用方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、什么是 TKMybatisTKMybat...
      99+
      2023-06-21
    • FileOpenDlg使用的方法是什么
      FileOpenDlg是一个函数,用于打开一个对话框,让用户选择一个文件。它是Windows操作系统提供的函数。 使用方法如下: ...
      99+
      2023-10-23
      FileOpenDlg
    • location.href的使用方法是什么
      location.href是一个属性,用于获取或设置当前页面的URL。通过设置location.href属性,可以实现页面的跳转功能...
      99+
      2024-03-08
      location.href
    • kindeditor使用的方法是什么
      KindEditor是一种基于web的所见即所得编辑器,可以用于在网页上进行富文本编辑。使用KindEditor进行编辑时,可以使用...
      99+
      2023-08-21
      kindeditor
    • gist的使用方法是什么
      本篇内容介绍了“gist的使用方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!第一步:创建gist仓库当你初次进入 gist 页面时...
      99+
      2023-07-06
    • canalyzer使用的方法是什么
      Canalyzer是一个网络分析工具,用于捕获和分析网络流量。它提供了多种方法来使用:1. 捕获数据包:Canalyzer可以通过网...
      99+
      2023-09-22
      canalyzer
    • sphinx的使用方法是什么
      Sphinx是一个用于生成文档的工具,特别适用于编写技术文档和API文档。 以下是使用Sphinx的基本步骤: 安装Sphinx:...
      99+
      2023-10-24
      sphinx
    • getjson的使用方法是什么
      getjson()方法是jQuery中的一个方法,用于从服务器加载JSON格式的数据。它用于发送一个HTTP GET请求并从服务器获...
      99+
      2024-03-02
      getjson
    • TreeSet的使用方法是什么
      TreeSet是Java中的一个集合类,它实现了Set接口,用于保存一组元素并且保持这些元素的顺序。TreeSet使用红黑树(Red...
      99+
      2024-03-08
      TreeSet
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作