有谁做过MQTT开发的,讨教几个问题

小灰狼 2018-09-30 03:52:22
业务需求大概是,N个嵌入式终端与一个服务端之间的通信

终端和服务端之间的通信机制是怎么样的,服务器如何判断收到的消息是某个终端的?以及服务器发给终端的信息,通过什么信息指定就是发给某个特点终端的?

是每个终端根据终端的SN(每个终端都会有一个唯一的SN)进行一定格式组合之后,作为 topic 发布消息吗?
比如,有100个终端,各自要向服务器定期汇报运行状态,那么每个终端发布的 topic 可以是:/device/status/device_sn
但是如此一来,服务端就要发布100个订阅了!

流行的做法是这样的吗?

后面还有些疑问,但是需要这个方式确定之后才好提!
...全文
1069 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
wzh154710510 2018-12-22
  • 打赏
  • 举报
回复
虽然没做过,但是按道理你说的没错,客户端订阅不同的topic。去实现给指定客户端发信息的功能,我想问下,你们的服务端是自己开发的吗?还是用开源软件,自己开发的就想怎么做就怎么做了,实现完全根据自己意愿
「已注销」 2018-10-13
  • 打赏
  • 举报
回复
可以讨论一下,本人前一阵子工作需要实现了mqtt协议
later_niu 2018-10-08
  • 打赏
  • 举报
回复
按你的设想的话,应该就要100个topic了。但是这100个topic貌似也不会带来什么不好。 服务器判断终端是根据终端的clientid的。
小灰狼 2018-10-08
  • 打赏
  • 举报
回复
七天过去了,自己顶一下
小灰狼 2018-10-08
  • 打赏
  • 举报
回复
引用 6 楼 qq_37832932 的回复:
[quote=引用 5 楼 hemowolf 的回复:]
[quote=引用 4 楼 qq_37832932 的回复:]
按你的设想的话,应该就要100个topic了。但是这100个topic貌似也不会带来什么不好。 服务器判断终端是根据终端的clientid的。


我没说有100个 topic 会带来不好,实际上终端可能有好几万个,我想一般的 mqtt 服务器支持应该没问题
我只是想知道目前行业流行的做法是不是这样的。简而言之,就是服务器想发给终端的信息里,mqtt 服务器应该明确知道应该把消息转发给具体的终端,而不是发广播之后,由终端自己判断。为达此目标,我目前想到的办法只有不同的终端订阅与自己有关的 topic 这一个办法[/quote]订阅了某个topic, mqtt的client便只会接收该topic下的消息, 不存在什么判断消息是否是自己该接收的了. 你的想法是服务端发消息给指定中断, 那么就在那个终端自己订阅的topic下发消息即可. [/quote]

是啊
就是,终端与服务端之间协议里约定一种消息的 topic 格式,比如服务端发给终端的topic格式是:server\terminal_sn;而终端发给服务端的topic格式是:terminal\terminal_sn。
终端知道自己的 sn,所以只订阅与自己有关的 topic,而服务端知道所有的终端 sn,所以可以订阅所有的来自终端的 topic。
later_niu 2018-10-08
  • 打赏
  • 举报
回复
引用 5 楼 hemowolf 的回复:
[quote=引用 4 楼 qq_37832932 的回复:]
按你的设想的话,应该就要100个topic了。但是这100个topic貌似也不会带来什么不好。 服务器判断终端是根据终端的clientid的。


我没说有100个 topic 会带来不好,实际上终端可能有好几万个,我想一般的 mqtt 服务器支持应该没问题
我只是想知道目前行业流行的做法是不是这样的。简而言之,就是服务器想发给终端的信息里,mqtt 服务器应该明确知道应该把消息转发给具体的终端,而不是发广播之后,由终端自己判断。为达此目标,我目前想到的办法只有不同的终端订阅与自己有关的 topic 这一个办法[/quote]订阅了某个topic, mqtt的client便只会接收该topic下的消息, 不存在什么判断消息是否是自己该接收的了. 你的想法是服务端发消息给指定中断, 那么就在那个终端自己订阅的topic下发消息即可.
小灰狼 2018-10-08
  • 打赏
  • 举报
回复
引用 4 楼 qq_37832932 的回复:
按你的设想的话,应该就要100个topic了。但是这100个topic貌似也不会带来什么不好。 服务器判断终端是根据终端的clientid的。


我没说有100个 topic 会带来不好,实际上终端可能有好几万个,我想一般的 mqtt 服务器支持应该没问题
我只是想知道目前行业流行的做法是不是这样的。简而言之,就是服务器想发给终端的信息里,mqtt 服务器应该明确知道应该把消息转发给具体的终端,而不是发广播之后,由终端自己判断。为达此目标,我目前想到的办法只有不同的终端订阅与自己有关的 topic 这一个办法
小灰狼 2018-10-03
  • 打赏
  • 举报
回复
引用 1 楼 u012171905 的回复:
你也可以一个topic,在消息体里面带上sn啊。。


我说的是服务端向终端发送的消息
如果每个终端都订阅同样的 topic,则每个终端都要收到这个消息,然后由终端自己判断这个消息是否属于自己。
这样做会给MQTT服务器带来不必要的带宽浪费,更重要的是一些终端是用物联网卡,大多数流量被浪费掉了
Coder_D 2018-09-30
  • 打赏
  • 举报
回复
你也可以一个topic,在消息体里面带上sn啊。。

62,612

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧