首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从MQTT客户端获取已连接客户端ID的列表

从MQTT客户端获取已连接客户端ID的列表
EN

Stack Overflow用户
提问于 2012-03-19 16:34:25
回答 6查看 46.7K关注 0票数 13

作为连接到蚊子的mqtt客户机,是否可以检索也连接到代理的客户机ID的列表?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2018-12-20 07:41:58

方法一:在客户端逻辑中进行处理

正如@user1048839所说,使用客户端的LWT和在线发布消息,在自定义主题上维护客户端状态。下标此主题&自我维护客户列表。

如果pub retain msg,一次sub将获得客户列表。

方法二:将蚊子代码更改为代理代码

官方代码不支持online_list

所以我把蚊子打到了1.5.4,添加了2个自定义sys主题:

1.在线列表

代码语言:javascript
复制
mosquitto_sub -i DDD -v -t '$SYS/broker/chen_list'
$SYS/broker/chen_list
0 - CLOUD0_19108
1 - EEE
2 - DDD

2.在线/离线事件

代码语言:javascript
复制
mosquitto_sub -i DDD -v -t '$SYS/broker/chen_state/#'
$SYS/broker/chen_state/DDD 1
$SYS/broker/chen_state/EEE 1
$SYS/broker/chen_state/CLOUD0_19108 1
$SYS/broker/chen_state/EEE 0
$SYS/broker/chen_state/EEE 1

//如果发布retain消息,则sub此主题可以获取所有客户端的在线状态(在有效负载中)。

在github上测试源代码:

4-online-list

5-online-event

票数 5
EN

Stack Overflow用户

发布于 2013-03-12 13:53:15

实现这一点的一种方法是让客户端在每次连接代理时发布主题为"status/ client -id“、有效负载为"1”的消息,并在断开连接时发布有效负载为"0“的消息。

然后在服务器(代理)端,设置另一个客户端订阅主题"status/#",当它获得任何这样的消息时,将client-id和有效负载(连接或未连接)存储到数据库中。

然后,您可以读取数据库,以确切地知道哪个客户端处于联机或脱机状态。

票数 9
EN

Stack Overflow用户

发布于 2016-09-22 12:55:51

您可能可以通过BASH命令netstat、grep和awk (如果需要)获取此信息。如果Mosquitto正在使用端口1883,那么我相信下面的代码会告诉你你想要什么:

sudo netstat | grep :1883

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9767040

复制
相关文章

相似问题

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