我有一些通过MQTT产生数据的设备发送到GCP IoT核心。我想监视设备当前是否与MQTT代理连接或断开。这已经回答了elsewhere on SO,这是我目前使用的方法:监控连接/断开连接消息的堆栈驱动程序日志,并将它们发布到单独的发布/订阅主题。然后,Firebase函数会读取此主题,以更新我的设备的在线/离线字段。
这在理论上是可行的,但由于JWT过期字段,每次令牌过期时我都必须重新连接设备,从而导致大量虚假的在线/离线触发。有没有办法在保持连接的同时刷新令牌?或者是一种更好的简单监控设备连接性的方法?
如果在N分钟内没有接收到心跳,或者甚至周期性地向设备发送某种ping命令,我可能会使用hearbeat事件,并且只考虑设备处于离线状态。不过,如果能简单地知道设备当前是否已连接就更好了。
发布于 2021-01-18 12:56:05
对于纯MQTT解决方案,我已经在做的事情和Orlandog的建议是正确的,但不能解决每次刷新JWT令牌时都会收到断开/连接消息的底层问题。这就是协议的工作原理。
我最终在我的设备上使用了balena.io,它在balena OS上运行docker containers和我的应用程序,并且OS本身通过虚拟专用网络连接。因此,不管我的应用程序的MQTT状态如何,我都可以使用balena API来监控设备的在线状态。然后使用firebase云函数轮询此API。
总结一下:
中
Balena最多可免费使用10台设备,并支持多种硬件。
发布于 2020-08-13 06:57:56
我认为通过使用Stackdriver日志和PubSub实现来监控设备的方式是最合适的。
同时,关于JWT令牌的过期,我建议您验证this documentation,它提供了几个如何刷新令牌从而防止设备断开连接的示例。
https://stackoverflow.com/questions/63224303
复制相似问题