关于mqtt:使用测试客户端玩转MQTT-50

73次阅读

共计 3449 个字符,预计需要花费 9 分钟才能阅读完成。

近日,由 EMQ 开源的跨平台 MQTT 5.0 桌面测试客户端 MQTT X 公布了最新版本 v1.7.0。MQTT X 反对疾速创立多个同时在线的 MQTT 客户端,不便测试 MQTT/TCP、MQTT/TLS、MQTT/WebSocket 的连贯、公布、订阅性能及其他 MQTT 协定个性。

新公布的 1.7.0 版本对 MQTT 5.0 实现了更为全面的反对,是寰球目前为止对 MQTT 5.0 反对最为残缺的桌面测试客户端工具。同时新增了很多优化用户体验的性能。

在本文中,咱们将具体介绍 MQTT X v1.7.0 新增性能的具体应用操作,特地是如何应用 MQTT X 来测试 MQTT 5.0 的诸多个性,以便读者能够在理论我的项目中更好地利用 MQTT 5.0。

筹备 MQTT 音讯服务器

在应用 MQTT X v1.7.0 对 MQTT 5.0 的个性进行测试之前,咱们首先须要筹备反对 MQTT 5.0 的 MQTT Broker。

本文将应用由 EMQ X Cloud 提供的收费在线 MQTT 5.0 服务器配合 MQTT X 客户端进行测试。作为一款全托管的云原生 MQTT 5.0 音讯服务,EMQ X Cloud 能够在数分钟内疾速创立一个 MQTT 服务,并且残缺反对 MQTT 5.0 协定,也是寰球首个全托管的 MQTT 5.0 私有云服务。

在测试开始前,收费在线的 MQTT 5.0 服务器服务器接入信息如下:

  • Broker: broker.emqx.io
  • TCP Port: 1883
  • SSL/TLS Port: 8883

MQTT 5.0 测试

用户属性

在 1.7.0 版本中,咱们首先反对了用户属性的配置。用户属性是 MQTT 5.0 中十分实用的一个个性,它是一种自定义属性,容许用户向 MQTT 音讯增加本人的元数据,传输额定的自定义信息以裁减更多利用场景,比方实现音讯的散发,文件传输,语言辨别等。该性能与 HTTP 的 Header 的概念十分相似。咱们能够在创立客户端连贯和公布音讯时进行用户属性的配置。

客户端连贯

点击新建按钮,来到新建客户端的页面,首先咱们须要抉择 MQTT 的版本为 5.0,这样就能够看到下方呈现了配置用户属性的卡片,卡片内是一个能够配置键值对的输入框,能够点击右上角的增加按钮,来减少用户属性配置,点击每一行开端的删除按钮能够删除配置,最初输出须要配置的属性名称和内容即可。连贯胜利后,MQTT 服务器就能够获取到该客户端的用户属性内容。

音讯公布

除了客户端连贯时的用户属性配置外,该版本还反对配置公布音讯时的用户属性。当新建连贯为 MQTT 5.0 的客户端时,咱们能够看到右下角的公布音讯的区域呈现了一个 Meta 按钮,点击该按钮即可呈现配置公布时的属性的卡片,咱们能够在卡片顶部看到用户属性配置。

当配置用户属性实现后,点击保留按钮,此时咱们再输出 Topic 和 Payload 点击发送,能够看到发送的音讯框内,蕴含了以后音讯所蕴含的用户属性的内容,如果当咱们接管到的音讯也蕴含了用户属性时,咱们在接管到的音讯框内也能够看到客户端发送过去的用户属性配置。

MQTT X 对于用户属性的反对,能够帮忙开发者在测试和验证具备 MQTT 5.0 用户属性性能的利用场景时,对该性能进行疾速验证和测试,从而晋升开发和应用效率。

申请响应

在 1.7.0 版本中,反对了 MQTT 5.0 中的申请响应,提供对响应主题和比照数据属性的配置,管制响应音讯被路由回申请的发布者。

因为 MQTT 协定是基于 Pub/Sub 模式的,区别于相似 HTTP 协定这样的申请响应模式,咱们很难接管到一些响应音讯。比方当咱们要测试公布一条控制指令,咱们很难获取到指令发送后的响应是什么,尽管能够实现,但过于简单。而 MQTT 5.0 中的申请主题能够更快更无效的实现这一能力。

咱们以公布一条开关灯的指令,并响应指令状态为例,展现响应主题的应用办法。咱们点击 Meta 按钮,输入框内输出一个响应主题:/ack/1,输出一个比照数据:light,并在以后连贯客户端订阅一个 /ack/1。

留神:MQTT 的申请响应是异步的,比照数据能够将响应音讯与申请音讯关联。

咱们应用 MQTT.js 再实现一个客户端,模仿接管控制指令的灯设施。当接管到开灯指令后,给响应主题发送一个开启胜利的响应音讯。实现要害代码:

client.on('message', (topic, payload, packet) => {console.log('Received Message:', topic, payload.toString())
  if (packet.properties && packet.properties.responseTopic) {
    client.publish(packet.properties.responseTopic, 'Success!', {
      qos: 0,
      retain: false,
    })
  }
})

点击发送音讯,咱们就能接管到来自灯设施接管开关指令胜利后的响应音讯了。

不过目前 MQTT X 对于申请响应个性仅反对在发送时配置响应主题和比照数据。后续将持续优化响应局部的配置,为用户带来更残缺的测试申请响应的能力。

内容类型和载荷格局

在 1.7.0 版本中,反对指定配置有效载荷的格局和内容类型。容许在音讯公布时指定载荷格局(二进制、文本)和 MIME 款式内容类型。咱们只须要在公布音讯前,点击 Meta 按钮,在输入框内输出 Content Type,点击设置 Payload Format Indicator 的值后,公布音讯即可。

内容类型的一个比拟典型的利用就是寄存 MIME 类型,比方 text/plain 示意文本文件,audio/aac 示意音频文件,而 application/json 示意是一条 JSON 格局的利用音讯。

而有效载荷指示器属性的值设置为 false 时,音讯是未确定的字节,当该属性值设置为 true 时,意味着音讯体中的有效载荷是 UTF-8 编码的字符数据。

这将有助于 MQTT 客户端或 MQTT 服务器能够更加无效的解析音讯内容,而不必特意去对于音讯体进行格局或类型的判断。

订阅选项

在 1.7.0 版本中还对 MQTT 5.0 中的订阅选项进行了反对。在新建一个 MQTT 5.0 的连贯后,咱们关上订阅主题的弹出框,能够看到下方呈现了蕴含了 No Local、Retain as Published 和 Retain Handling 的配置选项,用户能够应用这些订阅选项来扭转服务端的行为。

设置 No Local flag 为 true,那么服务端将不会向你转发你本人公布的音讯。否则如果你订阅了本人公布音讯的主题,那么你将收到本人公布的所有音讯。

设置 Retain as Published flag 为 true 时,能够指定服务端向客户端转发音讯时是否要保留其中的 Retain 标识,而不是客户端间接依附音讯中的 Retain 标识来辨别这是一个失常的转发音讯还是一个保留音讯。

Retain Handling 这一选项用来指定订阅建设时服务端是否向客户端发送保留音讯。设置为 0,只有客户端订阅胜利,服务端就发送保留音讯;设置为 1,客户端订阅胜利且该订阅此前不存在,服务端才发送保留音讯;设置为 2,即使客户订阅胜利,服务端也不会发送保留音讯。

在后续版本中咱们还将持续反对订阅标识符等 MQTT 5.0 中的新个性。

其余新性能应用

一键多主题订阅

在之前的版本中,咱们每次关上订阅主题的弹框只能订阅一个主题,对于想要订阅多个主题的用户来说,每次都须要点击关上和敞开能力订阅多个主题,不是很不便。因而该版本中,咱们做了优化,反对一次订阅多个主题。

咱们关上订阅主题的弹出框后,在 Topic 输入框内,输出多个 Topic 并应用逗号(,)进行宰割,点击确认订阅胜利后,咱们能够看到订阅列表中蕴含了多个 Topic。对于应用客户端层的别名性能也能够反对同时对多个 Topic 进行设置,同理应用逗号分隔(,)。

留神:别名输入框内的内容须要与 Topic 输入框内的 Topic 一一对应。

禁止音讯主动滚动

设置中新增了对接管和公布音讯时,音讯列表主动滚动的管制。能够到设置页面中开启主动滚动性能,实用于当音讯接管速率较慢时,帮忙用户查看到最新消息。当接管音讯的速率过快时,能够点击敞开该性能,帮忙用户查看一些已发送或已接管到的旧音讯。

留神:当敞开主动滚动性能后,能够晋升局部发送和接管音讯时的性能。

结语

通过本文,置信大家对 MQTT X v1.7.0 的性能应用有了更多理解。MQTT X 与 EMQ X 配合应用,能够帮忙您充沛把握 MQTT 5.0 协定,并在理论我的项目中将其个性更好地加以利用。

后续咱们还会欠缺 MQTT X 对相似主题别名、申请响应和订阅标识符等配置的反对能力,敬请期待。

正文完
 0