PHP 的 cURL 句柄与代理连接复用
区分保留 libcurl 的连接缓存与保证代理 TCP 连接一直存活这两件事。
保留 cURL 句柄可以让后续传输复用兼容的缓存连接。但它无法让代理永久保持一条 TCP 连接打开。
对端可能关闭空闲连接,网络路径可能消失,后续传输也可能需要不同的路由或隧道。复用是受这些条件约束的客户端优化,而不是可用性保证。
如果要通过同一个代理策略重复工作,请让相关句柄或多句柄连接缓存保持存活,并避免使用那些刻意要求新建连接或禁止复用的选项,除非任务确实需要。在认定第二次请求更短就证明发生了复用之前,请先检查实际的传输行为。
要小心那些声称连接会“一直打开到 curl_close”的旧 PHP 示例。PHP 文档说明 curl_close() 自 PHP 8.0 起已无任何效果,并自 PHP 8.5 起被弃用。资源归属和对象生命周期必须结合你部署的 PHP 版本去理解。
用定时器反复发送请求来给代理“保温”会增加流量,而且仍然无法阻止远端关闭连接。与其承诺某条代理连接永远存活,不如采用常规的连接管理、有超时上限的请求以及清晰的重试规则。