1. TNetHTTPClient 超时机制深度剖析
第一次用TNetHTTPClient做跨平台开发时,我被Android和iOS截然不同的超时表现坑得不轻。明明在Android上运行良好的代码,到了iOS设备上就像石沉大海,连个错误回调都没有。后来才发现,问题出在对ConnectionTimeout和ResponseTimeout这两个参数的误解上。
TNetHTTPClient的超时配置看似简单,实则暗藏玄机。ConnectionTimeout控制建立TCP连接的最大等待时间,而ResponseTimeout则决定从发送请求到接收完整响应的最长耗时。但在不同平台上,这两个参数的实现差异大得惊人:
delphi复制// 典型错误配置示例
NetHTTPClient1.ConnectionTimeout := 30000; // 30秒连接超时
NetHTTPClient1.ResponseTimeout := 60000; // 60秒响应超时
这样的配置在Windows和Android上可能工作正常,但在iOS上ConnectionTimeout根本不会生效。我曾在测试环境用Charles故意屏蔽服务器响应,结果Android设备30秒后准时抛出连接超时异常,而iOS设备却一直傻等到ResponseTimeout耗尽才报错。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 平台差异实战对比
2.1 Android平台的超时特性
Android对TNetHTTPClient的超时支持最为完整,但这也带来一些特殊问题。实测发现:
- ConnectionTimeout在4G网络下表现稳定,但在Wi-Fi切换蜂窝数据时可能出现双倍超时
- ResponseTimeout包含DNS解析时间,在弱网环境下需要适当放宽
- 后台运行时的超时行为会受系统省电策略影响
建议采用如下配置方案:
delphi复制// Android推荐配置
NetHTTPClient1.ConnectionTimeout := 15000; // 15秒
NetHTTPClient1.ResponseTimeout := 45000; // 45秒
NetHTTPClient1.Accept := 'application/json';
