最近我在思考一个问题。在长连接的使用场景中,为了及时释放空闲资源,通常会配置空闲超时机制。
这种机制应用于单个连接(比如一个 TCP 或 HTTP 连接)时,自然没问题。然而,如果放在一整条通信链路中,链路上的各个节点分别配置了不同的空闲超时参数,会发生什么情况呢?
我在一次实施中就遇到了类似的情况:当请求在发送后一段时间(大约 1 分钟)再次发起时,系统就会报错。由于我负责的是链路最下游的部分,无法直接查看上游节点的配置,只能推测可能是由于链路中各节点的空闲超时设置不一致所致。最终,我尝试将我这边的 idleTimeout
设置为永不超时,问题随之消失。我猜测,是上游没有监测到我的超时断开,进而导致的问题。
虽然问题得以解决,但具体成因仍然只是我的猜测,也没有权力知道全貌。因此为了验证这个猜想,我决定基于 Java 的 Vert.x 框架,模拟并分析这类链路中因空闲超时不一致而导致的问题。