首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用GCP IoT核心通过MQTT和JWT的持久设备连接状态

使用GCP IoT核心通过MQTT和JWT的持久设备连接状态
EN

Stack Overflow用户
提问于 2020-08-03 13:46:30
回答 2查看 465关注 0票数 1

我有一些通过MQTT产生数据的设备发送到GCP IoT核心。我想监视设备当前是否与MQTT代理连接或断开。这已经回答了elsewhere on SO,这是我目前使用的方法:监控连接/断开连接消息的堆栈驱动程序日志,并将它们发布到单独的发布/订阅主题。然后,Firebase函数会读取此主题,以更新我的设备的在线/离线字段。

这在理论上是可行的,但由于JWT过期字段,每次令牌过期时我都必须重新连接设备,从而导致大量虚假的在线/离线触发。有没有办法在保持连接的同时刷新令牌?或者是一种更好的简单监控设备连接性的方法?

如果在N分钟内没有接收到心跳,或者甚至周期性地向设备发送某种ping命令,我可能会使用hearbeat事件,并且只考虑设备处于离线状态。不过,如果能简单地知道设备当前是否已连接就更好了。

EN

回答 2

Stack Overflow用户

发布于 2021-01-18 12:56:05

对于纯MQTT解决方案,我已经在做的事情和Orlandog的建议是正确的,但不能解决每次刷新JWT令牌时都会收到断开/连接消息的底层问题。这就是协议的工作原理。

我最终在我的设备上使用了balena.io,它在balena OS上运行docker containers和我的应用程序,并且OS本身通过虚拟专用网络连接。因此,不管我的应用程序的MQTT状态如何,我都可以使用balena API来监控设备的在线状态。然后使用firebase云函数轮询此API。

总结一下:

  • IoT核心应用程序发送/接收带JWT刷新的MQTT作为一个扩展坞连接到配置了网络的
    • IoT
    • Balena API,可让您查询设备状态
    • 云函数调用balena API并将值存储在Firebase

Balena最多可免费使用10台设备,并支持多种硬件。

票数 1
EN

Stack Overflow用户

发布于 2020-08-13 06:57:56

我认为通过使用Stackdriver日志和PubSub实现来监控设备的方式是最合适的。

同时,关于JWT令牌的过期,我建议您验证this documentation,它提供了几个如何刷新令牌从而防止设备断开连接的示例。

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

https://stackoverflow.com/questions/63224303

复制
相关文章

相似问题

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