doh-proxy技术问题:如何维持单一HTTPS连接避免周期性重连?
解决doh-proxy doh-stub维持单一HTTPS连接的问题
无现成配置参数,需通过代码修改实现
doh-proxy 0.0.9版本的doh-stub并未提供控制连接复用的命令行参数,要实现单一连接的需求,需要修改核心代码。
代码修改步骤
问题出在doh-proxy依赖的aiohttp客户端默认会根据HTTP/2流的使用情况自动创建新连接,或是连接池存在扩容逻辑。以下是具体修改方案:
1. 找到ClientSession创建代码
定位到Python site-packages目录下的doh/stub.py文件(路径取决于你的Python安装位置),找到创建ClientSession的代码段,原代码大致如下:
self.session = aiohttp.ClientSession( connector=aiohttp.TCPConnector(ssl=ssl_context) )
2. 修改连接池参数强制单一连接
修改TCPConnector的参数,限制连接池仅保留1个连接,同时禁用主动关闭逻辑:
self.session = aiohttp.ClientSession( connector=aiohttp.TCPConnector( ssl=ssl_context, limit=1, # 强制连接池大小为1 force_close=False, # 禁止主动关闭连接 enable_cleanup_closed=False # 避免清理连接(可选) ), timeout=aiohttp.ClientTimeout(total=None) # 取消全局超时,防止连接被自动关闭 )
3. 可选:强制HTTP/2连接复用
如果问题仍存在,可强制指定HTTP/2协议,确保所有流复用单一连接:
self.session = aiohttp.ClientSession( connector=aiohttp.TCPConnector( ssl=ssl_context, limit=1, force_close=False, http2=True # 强制使用HTTP/2协议 ), timeout=aiohttp.ClientTimeout(total=None) )
4. 验证修改效果
重启doh-stub服务,发送测试DNS查询,观察日志确认是否不再新建连接,所有流量均通过初始连接转发。
补充说明
你提到的“处理998个流后新建连接”,大概率是aiohttp连接池默认的流数阈值触发了新连接创建,限制连接池大小为1即可彻底解决该问题。另外,若后续通过pip更新doh-proxy,修改会被覆盖,建议保留修改后的代码副本运行,或是fork项目维护自定义分支。
内容的提问来源于stack exchange,提问作者Einore
相关产品推荐
相关产品推荐

