【问题标题】:MQTT Client Publish and Subscribe at the same timeMQTT 客户端同时发布和订阅
【发布时间】:2016-12-09 05:37:34
【问题描述】:

我是 MQTT 的新手,我有一些问题希望你们能帮助我。我正在做一个学校项目,该项目需要我使用 MQTT 协议,并且程序需要用 C 编写。(只是一些背景信息)

  1. MQTT 客户端可以同时是发布者和订阅者吗?也就是说,在不断等待从代理接收消息并执行结果操作的同时,它还能够在需要时将消息发布到代理。

    我对 MQTT 的理解是这样的:MQTT Publisher --> MQTT Broker --> MQTT Subscriber

  2. MQTT的异步模式到底是什么?

谢谢!

【问题讨论】:

    标签: c mqtt


    【解决方案1】:

    1) 是的,MQTT 客户端没有理由不能成为发布者和订阅者,这是客户端工作的正常模式。

    2) 异步 MQTT 客户端实现是一种在执行网络操作(发送或接收数据)时不会阻塞的实现。这意味着所有网络操作都在后台进行,任何通常会阻塞的调用都会返回一个令牌,该令牌可用于检查该操作以后是否成功。

    【讨论】:

    • 您好,感谢您的回复!对于 Qn1,我该如何在编程中实现这一点?允许一个程序同时做这两个?老实说,我很迷茫,希望你能指出我正确的方向。谢谢!
    • 查看示例并尝试一下,当您遇到问题时提出新问题,包括您拥有的代码,有人会帮助您修复它
    【解决方案2】:

    1) 当您说您的 mqtt 客户端已订阅特定主题时,这意味着它将继续收听该主题,直到它被取消订阅或连接被终止。当您说您的 mqtt 客户端正在发布时,它会将 MqttMessage 发布到 Broker 并且所有订阅的客户端(即侦听)都会收到该消息。所以你只需要保持订阅并开始发布。

    2)异步模式不会阻塞线程执行任何操作。它只是作用于给定的动作并返回一个可用于跟踪和等待动作完成的令牌。这与同步模式相反,在同步模式下,线程被阻塞,直到操作完成,达到超时时间。

    例如:当您在异步模式下发布时,您将收到一个 IMqttDeliveryToken,稍后可以使用它来验证发布操作是否已完成。

    【讨论】: