Skip to content

Commit

Permalink
sync blog
Browse files Browse the repository at this point in the history
  • Loading branch information
emqx-ci-robot authored and Red-Asuka committed Nov 1, 2024
1 parent 00593c3 commit ba3ba96
Show file tree
Hide file tree
Showing 4 changed files with 133 additions and 47 deletions.
6 changes: 3 additions & 3 deletions README-ZH.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
## [MQTT Tutorials](https://www.emqx.com/zh/blog/category/mqtt-protocol)
Get to know the preferred protocol in IoT from beginner to master.

- [MQTT 协议快速入门:基础知识和实用教程](https://www.emqx.com/zh/blog/the-easiest-guide-to-getting-started-with-mqtt) ([Edit](https://github.com/emqx/blog/blob/main/zh/202410/the-easiest-guide-to-getting-started-with-mqtt.md))
- [MQTT QoS 0、1、2 解析:快速入门指南](https://www.emqx.com/zh/blog/introduction-to-mqtt-qos) ([Edit](https://github.com/emqx/blog/blob/main/zh/202410/introduction-to-mqtt-qos.md))
- [MQTT vs HTTP:谁更适合物联网?](https://www.emqx.com/zh/blog/mqtt-vs-http) ([Edit](https://github.com/emqx/blog/blob/main/zh/202408/mqtt-vs-http.md))
- [如何在 MQTT 中处理 JSON、十六进制和二进制数据](https://www.emqx.com/zh/blog/how-to-process-json-hex-and-binary-data-in-mqtt) ([Edit](https://github.com/emqx/blog/blob/main/zh/202408/how-to-process-json-hex-and-binary-data-in-mqtt.md))
- [MQTT 与 WebSocket:关键差异与应用场景](https://www.emqx.com/zh/blog/mqtt-vs-websocket) ([Edit](https://github.com/emqx/blog/blob/main/zh/202406/mqtt-vs-websocket.md))
Expand All @@ -33,14 +35,12 @@ Get to know the preferred protocol in IoT from beginner to master.
- [MQTT 订阅标识符介绍与实例 | MQTT 5.0 特性详解](https://www.emqx.com/zh/blog/subscription-identifier-and-subscription-options) ([Edit](https://github.com/emqx/blog/blob/main/zh/202306/subscription-identifier-and-subscription-options.md))
- [QUIC 协议:特性、应用场景及其对物联网/车联网的影响](https://www.emqx.com/zh/blog/quic-protocol-the-features-use-cases-and-impact-for-iot-iov) ([Edit](https://github.com/emqx/blog/blob/main/zh/202305/quic-protocol-the-features-use-cases-and-impact-for-iot-iov.md))
- [2023 年 MQTT 协议的 7 个技术趋势|描绘物联网的未来](https://www.emqx.com/zh/blog/7-mqtt-trends-in-2023) ([Edit](https://github.com/emqx/blog/blob/main/zh/202304/7-mqtt-trends-in-2023.md))
- [MQTT QoS 0, 1, 2 介绍](https://www.emqx.com/zh/blog/introduction-to-mqtt-qos) ([Edit](https://github.com/emqx/blog/blob/main/zh/202212/introduction-to-mqtt-qos.md))
- [MQTT 发布/订阅模式介绍](https://www.emqx.com/zh/blog/mqtt-5-introduction-to-publish-subscribe-model) ([Edit](https://github.com/emqx/blog/blob/main/zh/202212/mqtt-5-introduction-to-publish-subscribe-model.md))
- [MQTT 持久会话与 Clean Session 详解](https://www.emqx.com/zh/blog/mqtt-session) ([Edit](https://github.com/emqx/blog/blob/main/zh/202211/mqtt-session.md))
- [创建 MQTT 连接时如何设置参数?](https://www.emqx.com/zh/blog/how-to-set-parameters-when-establishing-an-mqtt-connection) ([Edit](https://github.com/emqx/blog/blob/main/zh/202210/how-to-set-parameters-when-establishing-an-mqtt-connection.md))
- [物联网首选协议,关于 MQTT 你需要了解这些](https://www.emqx.com/zh/blog/what-is-the-mqtt-protocol) ([Edit](https://github.com/emqx/blog/blob/main/zh/202210/what-is-the-mqtt-protocol.md))
- [MQTT 保留消息是什么?如何使用?](https://www.emqx.com/zh/blog/mqtt5-features-retain-message) ([Edit](https://github.com/emqx/blog/blob/main/zh/202210/mqtt5-features-retain-message.md))
- [通过案例理解 MQTT 主题与通配符](https://www.emqx.com/zh/blog/advanced-features-of-mqtt-topics) ([Edit](https://github.com/emqx/blog/blob/main/zh/202209/advanced-features-of-mqtt-topics.md))
- [MQTT 协议入门:基础知识和快速教程](https://www.emqx.com/zh/blog/the-easiest-guide-to-getting-started-with-mqtt) ([Edit](https://github.com/emqx/blog/blob/main/zh/202209/the-easiest-guide-to-getting-started-with-mqtt.md))
- [MQTT QoS 设计:车联网平台消息传输质量保障](https://www.emqx.com/zh/blog/mqtt-qos-design-for-internet-of-vehicles) ([Edit](https://github.com/emqx/blog/blob/main/zh/202203/mqtt-qos-design-for-internet-of-vehicles.md))
- [主流物联网协议选择:MQTT、CoAP 还是 LwM2M?](https://www.emqx.com/zh/blog/iot-protocols-mqtt-coap-lwm2m) ([Edit](https://github.com/emqx/blog/blob/main/zh/202202/iot-protocols-mqtt-coap-lwm2m.md))
- [MQTT 协议 Keep Alive 详解](https://www.emqx.com/zh/blog/mqtt-keep-alive) ([Edit](https://github.com/emqx/blog/blob/main/zh/202202/mqtt-keep-alive.md))
Expand Down Expand Up @@ -82,9 +82,9 @@ Get to know the preferred protocol in IoT from beginner to master.

## [MQTT Client](https://www.emqx.com/zh/blog/category/mqtt-client)

- [2024 年值得尝试的 7 个 MQTT 客户端(MQTT Client)工具](https://www.emqx.com/zh/blog/mqtt-client-tools) ([Edit](https://github.com/emqx/blog/blob/main/zh/202410/mqtt-client-tools.md))
- [MQTT 客户端自动重连最佳实践|构建可靠 IoT 设备连接](https://www.emqx.com/zh/blog/mqtt-client-auto-reconnect-best-practices) ([Edit](https://github.com/emqx/blog/blob/main/zh/202303/mqtt-client-auto-reconnect-best-practices.md))
- [MQTTX Web:在线的 MQTT 5.0 客户端工具](https://www.emqx.com/zh/blog/online-mqtt-client) ([Edit](https://github.com/emqx/blog/blob/main/zh/202208/online-mqtt-client.md))
- [2023 年值得尝试的 7 个 MQTT 客户端工具](https://www.emqx.com/zh/blog/mqtt-client-tools) ([Edit](https://github.com/emqx/blog/blob/main/zh/202207/mqtt-client-tools.md))
- [MQTTX CLI 发布:强大易用的 MQTT 5.0 命令行工具](https://www.emqx.com/zh/blog/powerful-and-easy-to-use-mqtt-5-command-line-tool) ([Edit](https://github.com/emqx/blog/blob/main/zh/202207/powerful-and-easy-to-use-mqtt-5-command-line-tool.md))
- [CocoaMQTT v2.0:首个支持 MQTT 5.0 的 iOS 客户端](https://www.emqx.com/zh/blog/ios-mqtt5-client) ([Edit](https://github.com/emqx/blog/blob/main/zh/202111/ios-mqtt5-client.md))
- [使用 MQTT.fx 接入 EMQX Cloud](https://www.emqx.com/zh/blog/connecting-to-emqx-cloud-with-mqttfx) ([Edit](https://github.com/emqx/blog/blob/main/zh/202108/connecting-to-emqx-cloud-with-mqttfx.md))
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,16 @@
## 什么是 QoS
## 引言

很多时候,使用 MQTT 协议的设备都运行在网络受限的环境下,而只依靠底层的 TCP 传输协议,并不能完全保证消息的可靠到达。因此,MQTT 提供了 QoS 机制,其核心是设计了多种消息交互机制来提供不同的服务质量,来满足用户在各种场景下对消息可靠性的要求
在不稳定的网络环境中,使用 TCP 传输协议的 MQTT 备可能会面临确保可靠通信的挑战。为了解决这个问题,MQTT 引入了一种 QoS 机制,提供多种消息交互选项,以满足用户在不同场景下对可靠消息传递的特定要求

MQTT 定义了三个 QoS 等级,分别为:
在本文中,我们将探讨 [MQTT](https://www.emqx.com/zh/blog/the-easiest-guide-to-getting-started-with-mqtt) QoS 等级 0、1 和 2,比较它们的性能,并提供实际用例,帮助您决定最适合您物联网项目的选项。

- QoS 0,最多交付一次。
- QoS 1,至少交付一次。
- QoS 2,只交付一次。
## MQTT QoS 简介

MQTT 中的 QoS 指的是发布者与订阅者之间消息传递的保证级别。它提供三个服务级别:

- **QoS 0 – 最多交付一次**
- **QoS 1 – 至少交付一次**
- **QoS 2 – 只交付一次**

其中,使用 QoS 0 可能丢失消息,使用 QoS 1 可以保证收到消息,但消息可能重复,使用 QoS 2 可以保证消息既不丢失也不重复。QoS 等级从低到高,不仅意味着消息可靠性的提升,也意味着传输复杂程度的提升。

Expand All @@ -18,30 +22,31 @@ MQTT 定义了三个 QoS 等级,分别为:

接下来,让我们来看看 MQTT 中每个 QoS 等级的具体原理。

## MQTT QoS 等级详解

## QoS 0 - 最多交付一次
### QoS 0 - 最多交付一次

QoS 0 是最低的 QoS 等级。QoS 0 消息即发即弃,不需要等待确认,不需要存储和重传,因此对于接收方来说,永远都不需要担心收到重复的消息。

![MQTT QoS 0](https://assets.emqx.com/images/8b641a22608772826781851ab63c197f.png)

### 为什么 QoS 0 消息会丢失?
**为什么 QoS 0 消息会丢失?**

当我们使用 QoS 0 传递消息时,消息的可靠性完全依赖于底层的 TCP 协议。

而 TCP 只能保证在连接稳定不关闭的情况下消息的可靠到达,一旦出现连接关闭、重置,仍有可能丢失当前处于网络链路或操作系统底层缓冲区中的消息。这也是 QoS 0 消息最主要的丢失场景。



## QoS 1 - 至少交付一次
### QoS 1 - 至少交付一次

为了保证消息到达,QoS 1 加入了应答与重传机制,发送方只有在收到接收方的 PUBACK 报文以后,才能认为消息投递成功,在此之前,发送方需要存储该 PUBLISH 报文以便下次重传。

QoS 1 需要在 PUBLISH 报文中设置 Packet ID,而作为响应的 PUBACK 报文,则会使用与 PUBLISH 报文相同的 Packet ID,以便发送方收到后删除正确的 PUBLISH 报文缓存。

![MQTT QoS 1](https://assets.emqx.com/images/b4f3ecaea5c047fa7352dc06753722c0.png)

### 为什么 QoS 1 消息会重复?
**为什么 QoS 1 消息会重复?**

对于发送方来说,没收到 PUBACK 报文分为以下两种情况:

Expand Down Expand Up @@ -75,7 +80,7 @@ QoS 1 需要在 PUBLISH 报文中设置 Packet ID,而作为响应的 PUBACK
以上,就是 QoS 1 保证消息到达带来的副作用。


## QoS 2 - 只交付一次
### QoS 2 - 只交付一次

QoS 2 解决了 QoS 0、1 消息可能丢失或者重复的问题,但相应地,它也带来了最复杂的交互流程和最高的开销。每一次的 QoS 2 消息投递,都要求发送方与接收方进行至少两次请求/响应流程。

Expand All @@ -86,7 +91,7 @@ QoS 2 解决了 QoS 0、1 消息可能丢失或者重复的问题,但相应地
3. 当接收方收到 PUBREL 报文,也可以确认在这一次的传输流程中不会再有重传的 PUBLISH 报文到达,因此回复 PUBCOMP 报文表示自己也准备好将当前的 Packet ID 用于新的消息了。
4. 当发送方收到 PUBCOMP 报文,这一次的 QoS 2 消息传输就算正式完成了。在这之后,发送方可以再次使用当前的 Packet ID 发送新的消息,而接收方再次收到使用这个 Packet ID 的 PUBLISH 报文时,也会将它视为一个全新的消息。

### 为什么 QoS 2 消息不会重复?
**为什么 QoS 2 消息不会重复?**

QoS 2 消息保证不会丢失的逻辑与 QoS 1 相同,所以这里我们就不再重复了。

Expand All @@ -113,7 +118,7 @@ QoS 2 规定,发送方只有在收到 PUBREC 报文之前可以重传 PUBLISH
一旦有了这个前提,我们就能够在协议层面完成 QoS 2 消息的去重。


## 不同 QoS 的适用场景和注意事项
## 不同 MQTT QoS 的适用场景和注意事项

#### QoS 0

Expand Down Expand Up @@ -158,13 +163,15 @@ QoS 2 既可以保证消息到达,也可以保证消息不会重复,但传

## 结语

至此,相信读者已对 MQTT QoS 有了深刻的理解。接下来,可访问 EMQ 提供的 [MQTT 入门与进阶](https://www.emqx.com/zh/mqtt-guide)系列文章学习 MQTT 主题及通配符、保留消息、遗嘱消息等相关概念,探索 MQTT 的更多高级应用,开启 MQTT 应用及服务开发。
通过理解和选择适合您 MQTT 设置的 QoS 级别,您可以优化物联网网络的性能和可靠性。无论您是使用 QoS 0 处理简单传感器数据,还是使用 QoS 2 管理关键操作,或者在 QoS 1 中寻求平衡,MQTT 灵活的 QoS 系统都能满足您的需求。

如需更详细的 MQTT 深入见解,请查看 EMQ 提供的 [MQTT 入门指南](https://www.emqx.com/zh/mqtt-guide),涵盖诸如通配符、保留消息等高级主题,帮助您构建稳健、可扩展的物联网系统。



<section class="promotion">
<div>
免费试用 EMQX Cloud
<div class="is-size-14 is-text-normal has-text-weight-normal">全托管的 MQTT 消息云服务</div>
咨询 EMQ 技术专家
</div>
<a href="https://accounts-zh.emqx.com/signup?continue=https://cloud.emqx.com/console/deployments/0?oper=new" class="button is-gradient px-5">开始试用 →</a>
<a href="https://www.emqx.com/zh/contact" class="button is-gradient">联系我们 →</a>
</section>
55 changes: 44 additions & 11 deletions zh/202207/mqtt-client-tools.md → zh/202410/mqtt-client-tools.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
随着物联网行业的飞速发展,MQTT 协议也被越来越多的公司及开发者所使用。在[学习和使用 MQTT](https://www.emqx.com/zh/mqtt-guide) 的过程中,一个得心应手的客户端工具可以极大的方便开发者进行 MQTT 特性的探索及物联网应用的调试,缩短开发周期
在快速发展的物联网 (IoT) 时代,[MQTT 协议](https://www.emqx.com/zh/blog/the-easiest-guide-to-getting-started-with-mqtt)已成为众多公司和开发者工作中不可或缺的组成部分。MQTT 客户端工具的使用已变得非常普遍,方便地实现了与 [MQTT 服务器](https://www.emqx.com/zh/blog/the-ultimate-guide-to-mqtt-broker-comparison) 的无缝连接,执行诸如发布、订阅和消息交换等多种功能

目前 MQTT 客户端工具种类繁多,功能侧重点也不尽相同。对于初学者乃至 MQTT 专家来说,如何选择一个合适的 MQTT 客户端工具是一个难题
对于希望深入了解 MQTT 特性并简化物联网应用调试过程的开发人员而言,选择合适的工具至关重要,有助于缩短开发周期。然而市面上众多 MQTT 客户端工具各自有着不同的功能重点,这使得开发人员在决定最合适的选项时面临挑战

我们根据自身的使用经验,对目前市面上常见的客户端工具进行了筛选和整理,选择了截至 2023 年最新、最实用的 7 个 MQTT 客户端工具,并按桌面端、浏览器端、命令行分类列出。希望本文可以帮助 MQTT 开发者快速找到一个合适的客户端工具,开展 [MQTT 连接](https://www.emqx.com/zh/blog/how-to-set-parameters-when-establishing-an-mqtt-connection)测试
本文整理了 2024 年七款最有价值的 MQTT 客户端工具。该选型分为桌面端、浏览器端、命令行和移动端四个类别,旨在帮助您快速识别适合您 MQTT 开发工作的理想工具


## 如何选择一个 MQTT 客户端?
Expand All @@ -17,7 +17,23 @@ MQTT 客户端工具常用于建立与 [MQTT 服务器](https://www.emqx.com/zh/
- 支持 MQTT over WebSocket;
- 进阶功能:支持自定义脚本、日志记录、 MQTT Payload 格式转换等。

## **前提条件:准备一个 MQTT Broker**

在深入了解 MQTT 工具之前,我们需要一个 MQTT Broker 来进行通信和测试。我们选择在 `broker.emqx.io` 上提供的免费公共 MQTT Broker。

**MQTT Broker 信息**

>服务器:`broker.emqx.io`
>
>TCP 端口:1883
>
>WebSocket 端口:8083
>
>SSL/TLS 端口:8883
>
>安全 WebSocket 端口:8084
更多相关信息,请查看:[免费的公共 MQTT 服务器](https://www.emqx.com/zh/mqtt/public-mqtt5-broker)

## MQTT 桌面客户端

Expand All @@ -34,7 +50,7 @@ MQTTX 致力于打造优雅、易用的全平台 MQTT 客户端,并在最近
#### 特性

- 跨平台,支持 Windows,macOS 和 Linux
- 支持 MQTT v3.1.1 以及 MQTT v5.0 协议
- 支持 MQTT 3.1.1、3.1 以及 5.0 协议
- 单/双向 SSL 认证:支持 CA、自签名证书,以及单、双向 SSL 认证
- 支持 Light、Dark、Night 三种主题模式切换
- 支持 WebSocket 连接至 MQTT 服务器
Expand All @@ -43,6 +59,7 @@ MQTTX 致力于打造优雅、易用的全平台 MQTT 客户端,并在最近
- 订阅 Topic 支持自定义颜色标记
- 支持 $SYS 主题自动订阅,查看流量统计
- 自定义编辑脚本测试和模拟收发数据
- AI 驱动的 MQTTX Copilot:简化 MQTT 测试与开发
- 完整的日志记录

#### 下载
Expand Down Expand Up @@ -103,9 +120,9 @@ MQTT.fx 使用 JavaFX 技术开发,可以保存多个连接配置,支持多

### MQTTX Web

[MQTTX Web](https://mqttx.app/zh/web) 是一款开源的 MQTT 5.0 浏览器客户端,也是一个在线 MQTT WebSocket 客户端工具。开发者无需在本地下载和安装 MQTTX,即可使用 WebSocket 在浏览器中快速连接到 MQTT 服务器,更快地开发和调试 MQTT 服务和应用。
[MQTTX Web](https://mqttx.app/zh/web) 是一款开源的 MQTT 5.0 浏览器客户端,也是一个在线 [MQTT WebSocket](https://www.emqx.com/zh/blog/connect-to-mqtt-broker-with-websocket) 客户端工具。开发者无需在本地下载和安装 MQTTX,即可使用 WebSocket 在浏览器中快速连接到 MQTT 服务器,更快地开发和调试 MQTT 服务和应用。

![](https://mqttx-static.emqx.net/img/banner.268d1fa.png)
![MQTTX Web](https://assets.emqx.com/images/2c99b9ae65c524993e522621cad154d2.png)

立即体验:[https://mqttx.app/web-client/](https://mqttx.app/web-client/)

Expand All @@ -123,13 +140,15 @@ MQTT.fx 使用 JavaFX 技术开发,可以保存多个连接配置,支持多

#### 特性

- **MQTT 协议支持:**完整支持 MQTT 3.1.1、3.1 以及 5.0
- **跨平台兼容**:支持 Windows、MacOS 和 Linux
- **无依赖限制**:基于命令行的安装和使用,无任何环境依赖要求

- **易于集成:**可快速集成到自动化测试脚本中
- **MQTT 基准测试**: 开箱即用的 MQTT 性能测试工具

- **配置文件**: 支持为 `连接``发布``订阅` 保存为本地配置文件

- **优雅的输出**: 输出对用户友好、易于理解的命令行内容,便于查看测试步骤及内容
- **多种安全认证**:支持 CA、自签名证书及单向和双向 SSL 认证
- **MQTT 消息模拟**:基于场景,支持自定义和内置选项

#### 下载

Expand Down Expand Up @@ -242,14 +261,28 @@ mosquitto_sub -t 'test/topic' -v
mosquitto_pub -t 'test/topic' -m 'hello world'
```

## MQTT 移动客户端工具

### EasyMQTT

EasyMQTT 是一款适用于 iPhone、iPad 和 macOS 的 MQTT 客户端,让您可以与任何 MQTT Broker 进行交互。您可以使用它管理家庭中的设备设置,控制如 Zigbee2MQTT 的应用程序,或监控远程 Broker。该工具拥有简洁、用户友好的界面,并支持浅色和深色模式。

![EasyMQTT](https://assets.emqx.com/images/f9118dd8e7c71a668b3667b1c629a1d0.png)

#### 下载

下载地址:[https://apps.apple.com/us/app/easymqtt/id1523099606?platform=iphone](https://apps.apple.com/us/app/easymqtt/id1523099606?platform=iphone)

## 结语

本文全面介绍了不同类别的 MQTT 客户端工具。其中,MQTTX 作为一个快速发展的客户端工具脱颖而出,以其现代化的聊天式界面、全面的 MQTT 5.0 支持和丰富的功能带来了卓越的用户体验。MQTTX 提供桌面版、命令行版和浏览器版三个版本,能够满足各种场景下的 MQTT 测试需求。毋庸置疑,MQTTX 已成为 2024 年最优秀的 MQTT 客户端工具之一。



<section class="promotion">
<div>
免费试用 EMQX Cloud
<div class="is-size-14 is-text-normal has-text-weight-normal">全托管的云原生 MQTT 消息服务</div>
<div>全托管的云原生 MQTT 消息服务</div>
</div>
<a href="https://accounts-zh.emqx.com/signup?continue=https://cloud.emqx.com/console/deployments/0?oper=new" class="button is-gradient px-5">开始试用 →</a>
<a href="https://accounts-zh.emqx.com/signup?continue=https://cloud.emqx.com/console/deployments/0?oper=new" class="button is-gradient">开始试用 →</a>
</section>
Loading

0 comments on commit ba3ba96

Please sign in to comment.