我正在应用逻辑来检查用户是在线还是离线。我正在使用MQTT和Mosquitto代理以及Java Android。
我允许client A
订阅client-id/status/
,现在只要他的应用开启,价值为true
的消息就会发布到client-id/status/
此服务会发布每隔30秒生成一个真值,并且在他关闭/销毁会话的任何时候,将另一个值为false的消息发布到代理。如果应用程序没有关闭,有人会问网络是否会关闭,我使用LWT将错误值发布到client-id/status/
在另一个Client B
同时正在查看Client A
是在线还是离线的人,现在随时Client B
打开应用,他将订阅客户的A状态,并将接收来自客户A的状态值。
如果有人在实施MQTT在线/离线逻辑方面有很多知识,如果我做错了,我会很高兴。谢谢你的帮助
答案 0 :(得分:0)
您的设置正常,将client-id
放入主题对于简单网络来说已经足够了。但是,只要您想扩展,您就会欣赏一件事:主题粒度。 您的主题应该描述为尽可能小的事件。伞形事件在有效载荷中具有广泛的细节,最终将限制网络的路由可配置性。将尽可能多的事件放在主题中。 主题免费。命名空间是你的。
所以具体来说,你的LWT不应该和" live client"状态改变。设为client-id/status/dropped
或其他内容。然后,您可以拥有一个额外的节点,该节点可以订阅+/status/dropped
并监控网络运行状况。即使单独status/online
和status/offline
分开也没有错,尽管我无法想象一个用例。我告诉你,你以后会欣赏这个设计。
我还发现使用解决方案名称为所有主题添加前缀是可行的,例如: yourname_project_v1
。这并不意味着涵盖同一个项目的有效负载版本控制,但以下情况: