
网络请求超时通常由客户端或服务器端响应延迟、网络拥塞、DNS解析失败等原因引起。正确处理超时需配置合理的参数,并结合实际场景优化。
连接超时(Connection Timeout) 客户端等待与服务器建立连接的最大时间。例如,HTTP请求中设置连接超时为5秒:
// Java (HttpURLConnection)
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setConnectTimeout(5000); // 5秒读取超时(Read Timeout) 客户端等待服务器返回数据的最大时间。例如,OkHttp中设置读取超时:
// Kotlin (OkHttp)
val client = OkHttpClient.Builder()
.readTimeout(10, TimeUnit.SECONDS) // 10秒
.build()场景 某电商APP在高峰期出现大量订单提交超时,原配置为连接超时3秒、读取超时10秒。
解决方案
# Python (requests with retry)
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry
session = requests.Session()
retries = Retry(total=3, backoff_factor=1)
session.mount('https://', HTTPAdapter(max_retries=retries))
response = session.get(url, timeout=(5, 10)) # (连接, 读取)动态超时调整 根据历史请求延迟动态计算超时阈值。例如,使用滑动窗口统计P90延迟: [ timeout = \mu + 2\sigma \quad (\mu为平均延迟, \sigma为标准差) ]
熔断机制 当错误率超过阈值时(如Hystrix配置),临时停止请求以保护系统:
// Java (Hystrix)
@HystrixCommand(
fallbackMethod = "fallback",
commandProperties = {
@HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "3000")
}
)
public String callAPI() { ... }proxy_read_timeout)。通过合理配置和场景化优化,可显著降低超时对用户体验的影响。