aws_sdk: 如何识别我的设备是否连接到 aws 服务器

aws_sdk: how can I identify if my device is connected to the aws server

我有一个设备 (esp32s2),它支持物联网并与 AWS 服务器通信。

设备正在通过路由器连接到互联网。我想从设备上检查路由器是否连接到互联网。如果未连接,我需要立即断开 mqtt 代理。

我知道发生了 aws_iot_yield,但在断开连接后更改客户端状态(约 5-10 分钟)花费了太多时间。那么,有没有其他方法可以让我知道设备是否已连接到 mqtt 代理或未使用 AWS sdk?

我想避免对某些 address/server 使用 ping,因为它会增加资源的使用。

提前致谢!

由于通过 Internet 连接到 AWS 服务器取决于网络元素,因此了解您是否连接到 Internet 的唯一可靠方法是将包发送到已知地址并接收响应。最简单的方法是使用 ICMP (ping) 协议。通常最可靠的 ping 目的地是 Google DNS 服务器 8.8.8.8 或 8.8.4.4,它是一个集群服务,它总是在 ping 上回复。

您可以控制两次 ping 之间的暂停以及在一个会话中发送多少 ping 以保留资源。

另一种方法是使用路由器,该路由器可以向监控设备发送 link 状态已更改的消息(例如 SNMP 陷阱)。但这不是完全可靠的方法,因为路由器无法检测到与您的 AWS 服务器的连接丢失的所有情况。