

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

# coreMQTT 代理库
<a name="coremqtt-agent"></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-agent-introduction"></a>

coreMQTT 代理库是一个高级别 API，它增加了 [coreMQTT 库](coremqtt.md) 的线程安全性。它允许您创建专用 MQTT 代理任务，该任务在后台管理 MQTT 连接，不需要其他任务的任何干预。该库可以提供与 coreMQTT 的 API 等效的线程安全性，因此可以在多线程环境中使用。

MQTT 代理是一个独立的任务（或执行线程）。它是唯一允许访问 MQTT 库的 API 的任务，从而实现了线程安全。它通过隔离对单个任务的所有 MQTT API 调用来序列化访问权限，并且无需使用信号灯或任何其他同步基元。

该库使用线程安全的消息队列（或其他进程间通信机制）来序列化所有调用 MQTT API 的请求。消息传递实现通过消息传递接口与库分离，该接口允许将库移植到其他操作系统。消息传递接口由用于发送和接收指向代理命令结构的指针的函数和用于分配这些命令对象的函数组成，允许应用程序编写者决定适合其应用程序的内存分配策略。

[该库以 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/)除了 [coreMQTT 库](coremqtt.md) 和标准 C 库之外，该库不依赖于任何其他库。该库有[证据](https://www.cprover.org/cbmc/)表明内存使用安全，没有堆分配，因此可用于 IoT 微控制器，但也完全可移植到其他平台。

该库可免费使用，并根据 [ MIT 开源许可证](https://www.freertos.org/a00114.html)分发。


****  
<a name="coreMQTTAgent-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\_agent.c</td><td>1.7K</td><td>1.5K</td></tr>
  <tr><td>core\_mqtt\_agent\_command\_functions.c</td><td>0.3K</td><td>0.2K</td></tr>
  <tr><td>core\_mqtt.c (coreMQTT)</td><td>4.0K</td><td>3.4K</td></tr>
  <tr><td>core\_mqtt\_state.c (coreMQTT)</td><td>1.7K</td><td>1.3K</td></tr>
  <tr><td>core\_mqtt\_serializer.c (coreMQTT)</td><td>2.8K</td><td>2.2K</td></tr>
  <tr><td>估计总数</td><td>10.5K</td><td>8.6K</td></tr>
</tbody>
</table>
