作为连接到蚊子的mqtt客户机,是否可以检索也连接到代理的客户机ID的列表?
发布于 2018-12-20 07:41:58
方法一:在客户端逻辑中进行处理
正如@user1048839所说,使用客户端的LWT
和在线发布消息,在自定义主题上维护客户端状态。下标此主题&自我维护客户列表。
如果pub retain
msg,一次sub将获得客户列表。
方法二:将蚊子代码更改为代理代码
官方代码不支持online_list,
所以我把蚊子打到了1.5.4,添加了2个自定义sys主题:
1.在线列表
mosquitto_sub -i DDD -v -t '$SYS/broker/chen_list'
$SYS/broker/chen_list
0 - CLOUD0_19108
1 - EEE
2 - DDD
2.在线/离线事件
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上测试源代码:
发布于 2013-03-12 13:53:15
实现这一点的一种方法是让客户端在每次连接代理时发布主题为"status/ client -id“、有效负载为"1”的消息,并在断开连接时发布有效负载为"0“的消息。
然后在服务器(代理)端,设置另一个客户端订阅主题"status/#",当它获得任何这样的消息时,将client-id和有效负载(连接或未连接)存储到数据库中。
然后,您可以读取数据库,以确切地知道哪个客户端处于联机或脱机状态。
发布于 2016-09-22 12:55:51
您可能可以通过BASH命令netstat、grep和awk (如果需要)获取此信息。如果Mosquitto正在使用端口1883,那么我相信下面的代码会告诉你你想要什么:
sudo netstat | grep :1883
https://stackoverflow.com/questions/9767040
复制相似问题