gpt4 book ai didi

http - go 似乎不尊重持久连接设置

转载 作者:行者123 更新时间:2023-12-01 22:39:21 28 4
gpt4 key购买 nike

我有一个使用 go 构建的反向代理。我已将其设置为使用持久连接。但是,当我在我的机器上监视打开的连接(使用 lsof -i)时,尽管我将它设置为 60 分钟,但它看起来就像在几分钟内关闭了连接。
如果我在下面的设置中设置了其他超时,比如 ResponseHeaderTimeout,那么这些超时就会被兑现。

    myProxy.Transport = &transport{&http.Transport{
Proxy: http.ProxyFromEnvironment,
DialContext: (&net.Dialer{
Timeout: 200 * time.Millisecond,
}).DialContext,
MaxIdleConns: 0, //no limit
MaxIdleConnsPerHost: 10,
IdleConnTimeout: 60 * time.Minute,
}}

最佳答案

http.Transport 中的空闲连接依赖于 http.Transport documentation 中提到的 HTTP 保持事件。 .这些设置由传输使用,同时与对等方交换 http 有效负载(通过添加适当的 keep-alive header )。
话虽如此,HTTP keep-alive 必须由交换双方(客户端和服务器)达成一致。大多数服务器限制最大值号码 开放连接数和 持续时间 (超时)保持事件请求的打开连接。这样做是为了避免潜在的 DOS 攻击,并在服务器上的系统资源有限的情况下为所有消费者提供公平的机会(每个保持事件连接都会增加服务器的开销)。
60 分钟的空闲超时太高了,我怀疑任何服务器都会遵守这一点(除非您也控制另一端的服务器配置)。通常,这会在几秒钟内保持,以便为单个 HTTP 页面及其所有资源(css、js、图像)提供足够的时间,以便使用单个连接从服务器加载。一旦页面加载成功,就没有理由在一般浏览世界中保持连接打开。默认情况下,Apache HTTPD 保留 KeepAliveTimeout为 5 秒。
同样值得注意的是,正如 Mozilla Keep-Alive documentation 中明确指出的那样。 ,如果在传输层没有设置keep-alive TCP 消息,则可以忽略超过TCP 超时的超时。
鉴于所有这些事实,您看到所看到的内容是绝对正常的(连接被自动关闭)。传输将在需要时自动启动新连接。

关于http - go 似乎不尊重持久连接设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62786838/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com