研究了一下三种java常用的http请求工具框架hutool、okhttp3、spring RestTemplate 对于连接超时和读超时的处理机制。
运行环境 jdk8 windows
连接超时
hutool、okhttp3、spring RestTemplate 三种请求,底层使用的都是jdk里的java.net.DualStackPlainSocketImpl#socketConnect
建立连接的最底层方法源码如下,其中connect0(nativefd, address, port) 是属于native方法了。
如上图,timeout是调用时显示设置的connect timeout,
hutool、spring RestTemplate : 调用时不显示设置,不会给默认设置,底层传入的是0,实际测试jdk8环境下最大等待20s。
okhttp3 : 调用时不显示设置,会默认给设置10s,所以底层一定有timeout。
读超时
待补充