首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >蚊子可以转发信息发送者的ClientID吗?

蚊子可以转发信息发送者的ClientID吗?
EN

Stack Overflow用户
提问于 2018-08-22 17:09:25
回答 3查看 2.9K关注 0票数 0

我使用的是mosquitto MQTT代理。另外,我有多个客户端(目前是10个,但数量还会增加),它们定期向topic A发布一些传感器数据。这些客户端在技术上是相同的,但具有唯一的标识符(序列号)。

我还有一个客户端,它订阅topic A,以便接收发布的消息并将传感器值持久化到数据库中。我当然需要知道哪个传感器(即客户端)发送了一个特定值。

作为一种解决方案,只需将一些传感器ID附加到每个已发布消息的有效负载。但是由于传感器通过GSM访问代理,所以我需要保持低流量,所以我正在努力避免这种情况。

我假设,代理本身知道哪个消息来自哪个客户端,特别是在使用持久连接时,即clean_session=False。对吗?如果是,订阅客户端是否有可能在收到消息时获得client_id?它可以在蚊子中配置吗?或者这是默认行为,我遗漏了什么?

我对所有客户端都使用paho-mqtt 1.3.1

EN

回答 3

Stack Overflow用户

发布于 2018-08-22 17:42:55

否,客户端id不是已发布消息的一部分。它仅用于在建立连接时向代理标识客户端,以便确定是否应遵守存储的消息和持久订阅。

最简单的解决方案是为每个传感器使用单独的主题,但具有共享的根目录。例如:

发布到A/2A/1

  • sensor 2发布到
  • 传感器1

然后,客户端将订阅A/+,这将接收所有消息,并可以使用主题的后半部分来确定它来自哪个传感器。

其他选项如您所建议的,将id包含在有效负载中。

票数 3
EN

Stack Overflow用户

发布于 2018-09-12 19:40:44

发送带有有效载荷(消息)的客户端id是可能的。但您需要在发布者端的有效负载(消息)中使用分隔符。示例: Publisher将有效负载发送为"client-ID=3 - temperature = 29“。在订户端,使用strtok()删除分隔符。broker端没有可用的配置。

票数 0
EN

Stack Overflow用户

发布于 2018-09-13 07:05:02

根据我使用message.

  • However,的经验,我认为在重新发布收到的
  1. 时,蚊子没有改变主题或负载的选项,我认为这只是一个实现问题。从理论上讲,我认为支持这种功能是可以的,因为它根本不违反MQTT规范。(http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/csprd02/mqtt-v3.1.1-csprd02.html#_Toc385349773,第3.3.2.1节)

但是,由于允许服务器覆盖主题名称,因此它可能与原始发布数据包中的主题名称不同。

  • 正如@hardillb所指出的,当前问题的实际解决方案是使用不同的主题发布但使用带有通配符(+或#)的主题接收,或者在有效负载中包含发布者信息。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51963413

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档