You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 22:47:13