首页 > 解决方案 > GSM 调制解调器:一段时间不活动后的套接字错误

问题描述

我们的外围设备必须与 MQTT 代理保持连接并等待接收发布并立即对其做出反应。

使用WiFi连接,目标就达到了。

使用 GSM 调制解调器 GL865 Telit,设置 MQTT PING = 30 分钟(因为我们想尽可能多地省钱)我们有这样的重复情况:

  1. 在外围设备上,TCP 套接字的状态是“在线”
  2. 大约 20 分钟后,我们写了一个外设订阅的主题
  3. 代理发现套接字“出错”并断开连接
  4. 但外围设备不知道或接收到任何套接字错误的指示
  5. 外设等待,直到达到 PING 时间
  6. 然后尝试 PING 但最终检测到 TCP 套接字错误并继续重新连接

如果我们使用 1 分钟的 PING,问题就不会发生,因为根本没有足够的时间让它发生。

我们认为问题与电话供应商有关,尤其是少数几个。只需更换 SIM 卡,少数供应商就会出现比其他供应商更多的问题。

有人遇到同样的问题吗?

标签: socketsmqttgsmprovider

解决方案


如果我没记错的话,GL865 的套接字超时默认为 120 秒。如果没有数据或套接字未更新,则套接字将解除绑定,您的代码将找出您遇到的困难方式。我认为您可以将其提高到 5 分钟,但您的 CSP 也会有某种“陈旧连接”超时。无论哪种方式,30 分钟对于 GSM 连接来说都太长了。

附带说明:GSM IoT 设备通常用于发送数据,而不是接收和处理数据……至少在我的经验中不是使用 MQTT。它非常适合从距离 Wifi 或 LoRA 太远的传感器发送数据,但正如您所发现的,它不善于保持连接以接收传入数据。对于这些用例,我几乎总是使用轮询/队列安排来唤醒设备,轮询任何传入消息,然后断开连接。如果您在发布时设置了 RETAIN 标志并且发布的数据包数量相对较低,则可以使用 MQTT 完成此操作。


推荐阅读