有个 Linux socket 问题困扰我很久了,求大佬分析下

2023-02-27 14:06:06 +08:00
 lovelylain

家宽,拨号成功大约 18 小时后,局端会自动踢下线,无公网 ip ,重拨号会得到新的内网 ip 。有个 nodered 连接了两个 mqtt 服务器,重拨号后一个可以在一分钟内重新连接,一个要 15 分钟才重新连接,这 15 分钟无法收发消息,谁知道是什么导致了这种差异?目前是设置了每天 4:15 强制重新拨号来避开日常使用时间,避免影响使用。

2023-02-27 04:15:13 重新拨号成功
27 Feb 04:15:45 - [info] [mqtt-broker:iobroker] Disconnected from broker: mqtt://domain:port
27 Feb 04:16:00 - [info] [mqtt-broker:iobroker] Connected to broker: mqtt://domain:port
27 Feb 04:30:50 - [info] [mqtt-broker:ifttt] Disconnected from broker: mqtts://ip:port
27 Feb 04:31:05 - [info] [mqtt-broker:ifttt] Connected to broker: mqtts://ip:port

mqtt://domain:port 是连的别人的,mqtts://ip:port 是我自己部署的,有试过改用域名,没区别。重新拨号后会走 mqtts://ip:port 发送通知,所以这个 15 分钟比较影响使用。会是 mqtts 与 mqtt 的区别导致吗?

735 次点击
所在节点    问与答
5 条回复
ysc3839
2023-02-27 15:35:34 +08:00
没有 keep alive ,导致断开后也不知道已经断开?直到 15 分钟可能有通信,才知道断开了?
tairan2006
2023-02-28 09:02:07 +08:00
你这 mqtts 的证书绑定的是公网 IP 地址么…

如果服务端是你自己部署的,建议先看看服务端日志,或者抓个包。
documentzhangx66
2023-02-28 09:23:38 +08:00
两个 mqtt 都写入 trace 级别的日志,甚至有条件可以直接开 IDE 调试运行。大概率是程序 bug 。
lovelylain
2023-02-28 09:49:16 +08:00
@tairan2006 是的,自签名的,有效期可以很长,不用担心续期失败。
@ysc3839 自己查了一下资料,区别可能是是否有数据传输导致的,nodered mqtt 本身实现了 60 秒 keepalive ,所以正常情况下没有数据就 60 秒断开,但是有数据时这个 60 秒就不生效了
lovelylain
2023-02-28 09:51:55 +08:00
要根据系统的 tcp_retries2 重试,重试 15 次就是差不多是 15 分钟,有时间验证下重拨不发数据和把

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/919503

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX