调用服务时连接超时VS读取超时

Posted

技术标签:

【中文标题】调用服务时连接超时VS读取超时【英文标题】:Connection timeout VS read timeout while calling service 【发布时间】:2019-02-01 06:50:06 【问题描述】:

我正在尝试使用 REST 模板从 Spring MVC 应用程序调用 REST API。 这样做时,我们必须设置超时值(连接超时和读取超时)并在 YML 文件中维护。

超时从 YML 读取并在初始化休息模板时设置。

例如,如果我有这样的场景:- 连接超时 = 5 秒,读取超时 = 3 秒

我的问题是何时会发生读取超时?

考虑到最坏的情况(在第 5 秒建立连接,在第 8 秒 [第 3 秒收到响应] 之后是否会发生读取超时?)

这两个超时是否相互依赖?

我搜索了相同但没有得到答案,因为我得到了信息,因为连接超时用于建立连接并且在从连接读取时会发生读取但是读取超时值是否包括连接超时值也不清楚.

这可能是基本问题,但我很困惑,因此任何有关相同的指导/指针都会有所帮助。

谢谢!

编辑:我已经通过了“Spring rest template readTimeOut”,它说时钟在请求第一次到达该套接字时开始,并在其中任何一个先出现时停止:请求完成或达到 readTimeout em> 但我明白在建立连接时也会受到套接字的影响。这是否意味着 readtimeout 也包括连接超时?

【问题讨论】:

Spring rest template readTimeOut的可能重复 @Mustafa 谢谢穆斯塔法!我也经历过同样的事情,它说一旦我们碰到插座,计数器就会开始。这是否意味着它将在“建立连接”之后?我知道在创建连接的同时也会遇到连接 是的,据我所知,连接超时适用于打开连接,读取超时适用于建立连接后。 @KedarJoshi 是的,您不能在尚未连接的套接字上调用 read()。第一个 read() 必须在连接建立之后。在大多数情况下,客户端在调用 read() 之前首先写入套接字。 【参考方案1】:

它们彼此独立。 假设httpUrlConntection.setConnectTimeout(10000); httpUrlConntection.setReadTimeout(10000);

所以我们在 TCP 握手之前有 10 秒的时间。一旦触发读取,我们有 10 秒的时间读取数据包。如果响应没有完全传输,则抛出异常。

对于概念理解: What is the difference between connection and read timeout for sockets?

【讨论】:

以上是关于调用服务时连接超时VS读取超时的主要内容,如果未能解决你的问题,请参考以下文章

局域网下的客户端调用服务接口超时的问题总结

记:k8s内部服务调用连接超时

用FTP工具FileZilla“连接超时,读取目录失败”

Spring RestTemplate 连接超时不起作用

Windows Mobile Emulator 连接超时访问本地 Web 服务

NGINX *7060 上游超时(110:连接超时)