

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# coreMQTT 库
<a name="coremqtt"></a>

**注意**  <a name="out-of-date-message"></a>
此页面上的内容可能不是最新的。请参阅[FreeRTOS.org 图书馆页面](https://www.freertos.org/Documentation/03-Libraries/01-Library-overview/01-All-libraries)以获取最新更新。

## 简介
<a name="coremqtt-introduction"></a>

coreMQTT 库是 [MQTT](https://en.wikipedia.org/wiki/MQTT)（消息队列遥测传输）标准的客户端实现。MQTT 标准提供了一种轻量级 publish/subscribe （或 [PubSub](https://en.wikipedia.org/wiki/Publish%E2%80%93subscribe_pattern)）消息协议，该协议在机器对机器 (M2M) TCP/IP 和物联网 (IoT) 用例之上运行，通常用于机器对机器 (M2M) 和物联网 (IoT) 用例。

coreMQTT 库符合 [MQTT 3.1.1](http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/mqtt-v3.1.1.html) 协议标准。该库已针对低内存占用空间进行了优化。该库的设计涵盖了不同的使用案例，从仅使用 QoS 0 MQTT PUBLISH 消息的资源受限平台，到使用 QoS 2 MQTT PUBLISH over TLS（传输层安全）连接的资源丰富平台。该库提供了可组合函数的菜单，可选择和组合这些函数来精确满足特定使用案例的需求。

[该库以 **C** 语言编写，旨在符合 [ISO C90 和 MISRA](https://en.wikipedia.org/wiki/ANSI_C#C90)。 C:2012](https://misra.org.uk/product/misra-c2012-third-edition-first-revision/)除以下库外，此 MQTT 库不依赖任何其他库：
+ 标准 C 库
+ 客户实现的网络传输接口
+ （可选）用户实现的平台时间函数

通过提供简单的发送和接收传输接口规范，该库与底层网络驱动程序分离。应用程序编写者可选择现有传输接口，也可以根据自己的应用程序实现自己的传输接口。

该库提供了一个高级别 API，用于连接 MQTT 代理、 subscribe/unsubscribe 主题、向主题发布消息以及接收传入的消息。此 API 将上述传输接口作为参数，并使用该参数向 MQTT 代理发送和接收消息。

该库还公开了低级别 serializer/deserializer API。此 API 可用于构建仅包含所需的 MQTT 功能子集的简单 IoT 应用程序，无需任何其他开销。该 serializer/deserializer API 可以与任何可用的传输层 API（如套接字）结合使用，向代理发送和接收消息。

在 IoT 应用中使用 HTTP 连接时，我们建议您使用安全的传输接口，例如，使用 TLS 协议的接口。

此 MQTT 库没有平台依赖关系，例如线程或同步。该库有[证据](https://www.cprover.org/cbmc/)表明内存使用安全，没有堆分配，因此适用于 IoT 微控制器，但也完全可移植到其他平台。该库可免费使用，并根据 [MIT 开源许可证](https://freertos.org/a00114.html)分发。


****  
<a name="coreMQTT-memory-estimate"></a>
<table>
<thead>
  <tr><th colspan="3">CoreMQTT 的代码大小（使用适用于 ARM 的 GCC 生成的示例） Cortex-M</th></tr>
  <tr><th>文件</th><th>使用 -O1 优化</th><th>使用 -Os 优化</th></tr>
</thead>
<tbody>
  <tr><td>core\_mqtt.c</td><td>4.0K</td><td>3.4K</td></tr>
  <tr><td>core\_mqtt\_state.c</td><td>1.7K</td><td>1.3K</td></tr>
  <tr><td>core\_mqtt\_serializer.c</td><td>2.8K</td><td>2.2K</td></tr>
  <tr><td>估计总数</td><td>8.5K</td><td>6.9K</td></tr>
</tbody>
</table>
