Mqtt发布响应和Mqtt订阅消息会混淆吗?

Mqtt发布响应和Mqtt订阅消息会混淆吗?,mqtt,microcontroller,Mqtt,Microcontroller,我正在微控制器上编写mqtt客户机。它通过LTE调制解调器连接,并连接到mqtt代理。我在LTE调制解调器上使用tcp/ip堆栈和mqtt堆栈。我将LTE调制解调器连接到uart,并解析接收到的数据 我向调制解调器发送命令以连接到mqtt代理的“驱动程序”部分是最简单的部分。当我在线和操作时,它变得丑陋。然后我定期发送(发布)消息,同时我可以响应订阅的“服务器请求” 因此,每当我向代理发布消息时,理论上我可以“同时”(就在我收到对发布请求的响应之前或之后)从代理接收订阅消息 我通常如何处理这个问

我正在微控制器上编写mqtt客户机。它通过LTE调制解调器连接,并连接到mqtt代理。我在LTE调制解调器上使用tcp/ip堆栈和mqtt堆栈。我将LTE调制解调器连接到uart,并解析接收到的数据

我向调制解调器发送命令以连接到mqtt代理的“驱动程序”部分是最简单的部分。当我在线和操作时,它变得丑陋。然后我定期发送(发布)消息,同时我可以响应订阅的“服务器请求”

因此,每当我向代理发布消息时,理论上我可以“同时”(就在我收到对发布请求的响应之前或之后)从代理接收订阅消息

我通常如何处理这个问题?处理这一问题的最佳做法是什么

以下是一些澄清我的问题的例子:

mqtt开始:

Send: AT+CMQTTSTART
Receive: [CR][NL]OK[CR][NL]

[CR] = \r
[NL] = \n
因为mqtt代理还不知道我的存在,所以我不必担心“意外”发送任何字节。所以,在我订阅主题之前,一切都很简单

但是,当我成功订阅了一些主题后,开始发布某些内容时,以下可能会有点棘手:

Send: AT+CMQTTTOPIC=0,3
Receive: [CR][NL]>                    This is the expected reply for the given command
Receive: [CR][NL]+CMQTTRXSTART:....   This is the start of a published message

当然,顺序甚至可能是相反的。如果发布的消息足够长,以至于它被分成不同的包,那么对我的topic命令的响应可能会在发布的消息包之间的某个地方结束

我觉得我做错了什么,这让我陷入了这个过于复杂的局面。因为mqtt应该是“简单的”,所以我一定是做错了什么


希望有人能帮我一点忙

“当然顺序也可能是相反的”你真的看到了吗?不,这有点难测试/调试,但是消息是异步发布的,所以我想任何顺序都是可能的,代理不会按顺序发送消息,并且它将始终在任何匹配消息之前发送对订阅请求的响应。您是否确实看到您的实现存在问题,或者这一切只是理论上的问题?如果我开始定义主题,我从代理返回一个提示,需要指定定义主题的字符。在那一刻(在我的MCU回复实际的主题名称之前),我将一条消息从代理发布到我的MCU。这就是我“强制”的。这就是我的问题所在。如果我可以强制执行此行为(因此必须仔细检查我从brooker收到的消息,以检查它是否属于我请求的内容,或者它是否属于某个已发布的消息),那么我想象我也可以有发布消息定时的情况。。。。。。。