代理IP什么时候适合用长连接?减少握手开销的Keep-Alive配置指南

代理模式握手开销翻倍原理、浏览器和代码Keep-Alive配置、Wireshark验证
发布于
14

每个新请求都做一次TCP三次握手加TLS四次握手——在代理模式下这个开销翻倍(客户端到代理握手+代理到目标握手)。Keep-Alive复用连接能省掉后续请求的所有握手。

Keep-Alive在代理模式下的工作原理

客户端到代理IP:建立一条TCP连接→Keep-Alive保持这条连接不关闭→后续请求都走这条连接。代理IP到目标网站:建立一条TCP连接→代理服务器用连接池复用→多个客户端请求复用同一条到目标的连接。

收益:第一个请求耗时100ms(握手60ms+传输40ms),第二个及后续请求耗时只要40ms(省掉握手)。发100个请求=省掉9900ms。天行IP(邀请码 blsj,月付6元起)配合Keep-Alive效果明显。

浏览器端配置

浏览器默认开Keep-Alive。如果通过代理客户端(老鱼/SSTap/有米)→客户端会维护到代理节点的Keep-Alive连接。不需要额外配置。如果配了系统代理→浏览器直接和代理IP之间Keep-Alive,也不需额外配置。

代码端配置

Python requests的Session默认Keep-Alive。requests.post每次新建Session=每次新建连接=浪费。用同一个Session实例发所有请求→自动复用连接。

urllib3连接池:默认每个host保持10个连接→高并发不够。调大pool_connections(参考第34篇ID 13579)。

什么时候不适合Keep-Alive

间隔很久才发一个请求(几分钟)→连接可能在空闲时被代理服务器关闭→下一次请求还得重新握手。请求之间切换不同代理IP→每次换IP都必须新建连接。这两种场景下Keep-Alive基本无效。

常见问题

代理断开重连后需要重新握手吗?

需要——断了就没了。自动重连后第一个请求需要完整握手,后续请求恢复Keep-Alive优势。

怎么确认Keep-Alive生效?

Wireshark抓包看TCP连接数——发10个请求但只有1条TCP连接→Keep-Alive生效。发了10个请求有10条TCP连接→没生效。

本文由作者原创/授权发布于极跃圈(jiyueip.com),未经许可,禁止转载。题图来自Unsplash,基于CC0协议。

声明:极跃圈(JIYUEIP.com)内网友所发表的所有内容及言论仅代表其本人,并不反映任何极跃圈(JIYUEIP.com)之意见及观点。

0 / 600
0 讨论
热门最新
总结
暂无总结

暂无数据