【问题标题】:Can a MQTT client publish multiple messages concurrently to a Broker?MQTT 客户端可以同时向 Broker 发布多条消息吗?
【发布时间】:2021-08-26 09:05:12
【问题描述】:

我正在尝试设置一个 MQTT 消息传递系统,其中我有以下约束:

我有一个客户想要发送不同类型的消息,每个消息都针对特定类型的主题。例如,一种类型是只描述客户端状态的短消息,另一种类型是有时可能非常大的文件。

关键是我希望客户端能够同时发送消息:由于连接速度可能受到限制,如果它发布包含大文件的大消息,然后立即发布包含状态的消息,我希望将状态并行发送,以便长文件不会阻塞短状态消息。

简而言之,发送到同一个主题的消息都会一个接一个地发送,但我希望能够在不同主题之间并行发送。

此外,系统拓扑需要多个代理之间的桥接。如果客户端和代理之间可以实现,那么多个代理之间的并行发送也可以吗?

我已经尝试过在 Python 上使用 Mosquitto Brokers 和 Paho 客户端,方法是创建多个线程,每个线程都有一个客户端,但即使这样似乎也无法实现并行化。对于实施的客户端和语言的选择,我仍然持开放态度。

希望没有太长,并且已经足够简单地总结了这个主题,感谢那些已经阅读到这里的人!

【问题讨论】:

    标签: concurrency mqtt messaging


    【解决方案1】:

    不,客户端与代理有单个 TCP 连接,并且消息需要在单个字节流中发送,您不能在流上同时多路复用多个消息。

    【讨论】:

    • 有没有办法通过对每种类型的消息使用不同的客户端来做到这一点?对不起,如果我的问题听起来很愚蠢,但我不是网络专家。我也有点担心在论坛和官方文档中找不到任何关于该主题的内容。
    • 多个客户端的行为方式取决于它们所连接的代理。例如mosquitto 是围绕单线程事件循环构建的,因此它一次只能从所有连接的客户端接收一条消息。
    • 好的,感谢您的解释。要知道,通过实验,我看到我们能够在 2 个代理之间设置多个网桥,这样我想要的就是可能的:bridge_1 同步 topic_group_1 和 bridge_2 topic_group_2,我现在可以多路复用我的发送!是否因为一个桥在单个线程中建立了一个事件循环,而第二个也并行工作?
    • 网桥对您没有帮助,因为代理之间的网桥流量是在与任何其他客户端相同的事件循环上处理的。
    • 如果是这样,我不明白为什么我目前能够通过一个网桥(网络速度较慢)发送具有大负载的第一条消息,然后通过另一个网桥发送一条小消息,并且小消息回调首先到达..实际上,也许经纪人会一次处理每条消息,但是由于我的客户和经纪人都连接在本地网络中,并且只有网桥的互联网速度有限,所以这个解决方案对我来说似乎是正确的,不是吗?
    猜你喜欢
    • 2017-12-26
    • 1970-01-01
    • 2019-06-01
    • 2019-09-26
    • 2021-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-08
    相关资源
    最近更新 更多