连接超时和套接字超时建议

Connection timeout and socket timeout advice

我目前正在研究连接和套接字超时设置,但我对这些东西还很陌生。

我们正在考虑在 运行 json 通过 http 调用另一台服务器时添加 40 秒作为连接和套接字超时。

    httpConnectionManagerParams.setConnectionTimeout(40000);
    httpConnectionManagerParams.setSoTimeout(40000);

但我真的不知道如何理解理想的设置或最佳实践是什么。如果有人能给我一些关于什么时候应该考虑什么的指示,或者关于如何对这些设置做出良好估计的提示,我将不胜感激。

我正在寻找的建议是……40 秒太长了,因为它可能会导致另一个问题……或者……您将此值设置得越高,您就越有可能有引起另一个问题...或 40 秒根本不高...或计算出一个理想的数字 Y 乘以 T

谢谢


编辑

添加 firebug 服务器调用跟踪。

没有任何理由认为它们应该相等。分别考虑每个条件,您希望将它设置得足够高,以便超时将指示真正的问题,而不仅仅是临时过载,并且设置得足够低,以便您保持应用程序的响应能力。

通常,40 秒对于连接超时来说太长了。我会怀疑地看待任何两位数的事情。服务器应该能够每秒接受数十或数百个连接。

读取超时是完全不同的事情。 'correct' 值(如果存在的话)完全取决于请求的平均服务时间及其方差。作为起点,您可能希望将其设置为预期服务时间的两倍,或者平均服务时间加上两个或三个标准偏差,这完全取决于您的服务级别要求和服务器的性能及其差异。对此没有硬性规定。许多合同服务级别协议 (SLA) 指定 'normal' 两秒的响应时间,这可能会通知您的审议。但这是你的决定。