libcurl 多代理传输:连接上限与排队
支持 CONNECT;某个主机或连接总上限被占用时,传输可能在尝试建立套接字之前进入等待。
关于多代理传输会阻塞的报告,需要给出 libcurl 版本与 TLS 后端。它并不能证明每次 CONNECT 传输都需要一个操作系统线程。
| 等待 | 应检查什么 |
|---|---|
| 单个端点的额度 | CURLMOPT_MAX_HOST_CONNECTIONS 会把代理计为 host,即使目标站点各不相同 |
| 整个 multi handle 的额度 | 连接总数上限可能形成另一条队列 |
| 一次连接尝试之后 | 代理的实际响应,或该版本特有的阻塞行为 |
把事件循环集成、上限与超时预算同所安装版本的接口做对比。提高并发可能只是把队列推进代理解,而没有解决根本原因。
在改动应用的并发架构之前,先判断问题出在客户端队列、响应缓慢,还是实现特有的阻塞。