用于检查MQTT中客户端是联机还是脱机的逻辑

时间:2017-02-01 01:04:01

标签: android

我正在应用逻辑来检查用户是在线还是离线。我正在使用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在线/离线逻辑方面有很多知识,如果我做错了,我会很高兴。谢谢你的帮助

1 个答案:

答案 0 :(得分:0)

您的设置正常,将client-id放入主题对于简单网络来说已经足够了。但是,只要您想扩展,您就会欣赏一件事:主题粒度您的主题应该描述为尽可能小的事件。伞形事件在有效载荷中具有广泛的细节,最终将限制网络的路由可配置性。将尽可能多的事件放在主题中。 主题免费。命名空间是你的。

所以具体来说,你的LWT不应该和" live client"状态改变。设为client-id/status/dropped或其他内容。然后,您可以拥有一个额外的节点,该节点可以订阅+/status/dropped并监控网络运行状况。即使单独status/onlinestatus/offline分开也没有错,尽管我无法想象一个用例。我告诉你,你以后会欣赏这个设计。

我还发现使用解决方案名称为所有主题添加前缀是可行的,例如: yourname_project_v1。这并不意味着涵盖同一个项目的有效负载版本控制,但以下情况:

  • 您的解决方案的新演变具有模糊相似的主题结构,但不同的有效负载格式,并且您希望通过相同的代理(您花费精力设置可靠性)来运行它。
  • 通过公共免费代理运行,进行测试,原型设计或可能的紧急备份