gpt4 book ai didi

http - 在 Go 中创建空闲超时?

转载 作者:IT王子 更新时间:2023-10-29 01:52:58 25 4
gpt4 key购买 nike

我将 CloudFlare 用于我的一个高流量网站,它位于我的堆栈前面。

问题是,CloudFlare 除了创建新连接外,还会打开空闲连接,这不是我可以更改的设置。

当我让 Varnish 或 Nginx 坐在前面监听端口 80 时,它们具有开箱即用的配置来挂断空闲连接。

这很好,直到我不得不将一个用 Go 编写的代理添加到我的堆栈的前面。它使用 net/http 标准库。

我不是 Go 向导,但根据人们告诉我的内容,只有读写超时设置,但不会挂断空闲连接。

现在我的服务器会被连接填满然后挂掉,除非我设置了一个设置的读写超时,但问题是我的后端有时会花费很长时间,这会导致好的请求在它们不应该被切断时被切断.

使用 Go http 处理空闲连接的正确方法是什么?

编辑 1:为了更清楚,我正在使用 httputil.NewSingleHostReverseProxy 构建一个代理,它公开传输选项但仅用于上游。我遇到的问题是下游问题,它们需要在使用 ReverseProxy 作为处理程序的 http.Server 对象上设置。 http.Server 不公开传输。

编辑 2:我更喜欢空闲超时而不是读取超时,因为后者适用于活跃的上传者。

谢谢

最佳答案

在 Go http 服务器中挂断空闲连接的正确方法是设置 read timeout .

没有必要设置写入超时以挂断空闲客户端。如果它会切断响应,请不要设置或调整它。

如果你有很长的上传,然后使用 a connection state callback实现单独的空闲和读取超时:

server.ConnState = func(c net.Conn, cs http.ConnState) {
switch cs {
case http.StateIdle, http.StateNew:
c.SetReadDeadline(time.Now() + idleTimeout)
case http.StateActive:
c.SetReadDeadline(time.Now() + activeTimeout)
}
}

关于http - 在 Go 中创建空闲超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29334407/

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