什么导致码头空闲超时

What causes a jetty idletimeout

我们的服务器使用的是 clojure ring.adapter.jetty,我们的一位用户在上传大约 20MB 的大文件时导致 java.io.IOException: java.util.concurrent.TimeoutException: Idle timeout expired: 200000/200000 ms 错误。他的连接速度很慢,但我没有遇到同样的错误限制我的连接。超时异常足够高(这是空闲超时,不是上传超时)

我们上传过程的快速版本是使用多部分形式,然后使用 java.io.copy 将临时文件复制到服务器文件夹。

我试图至少用我的机器重新创建错误以使错误处理正常工作。如果我发现任何更改我的应用程序代码的解决方案,我也需要通过尝试导致错误来测试它们。到目前为止,我尝试将我的速度限制在尽可能接近 0 的水平,并在 devtools (chrome) 中设置超高延迟,并将码头超时设置为 100 毫秒,但它仍然可以正常上传。

用户还可以做些什么来帮助减少超时的可能性。

当连接上没有 activity 配置的 IdleTimeout 的读或写时,IdleTimeout 触发。

在您的用户案例中,该连接上没有 activity 达 200,000 毫秒(约 3.3 分钟)并且连接已关闭。

3.3 分钟对于移动网络来说实际上是一个较低的值。

根据经验,您可能希望至少将其增加到 300,000 毫秒(或 5 分钟)。