【问题标题】:Golang keep aliveGolang 保持活力
【发布时间】:2021-08-19 08:26:19
【问题描述】:

我有以下 go 代码:

package main

import (
   "net/http"
    "github.com/labstack/echo"
)
func main() {
e := echo.New()
e.POST("/getRequestData", respond)
e.Logger.Fatal(e.Start(":80"))
}

func respond(c echo.Context) error {

        resp := map[string]string{ "value": "key"}
        return c.JSON(http.StatusOK, resp)
}

我希望与此服务器的连接在 10 分钟内保持不活动状态。 我看到每隔几分钟我就会从服务器收到 Ack,这会导致它无限期地保持打开状态。 如何在 go 中关闭 keep-Alive?

谢谢。

【问题讨论】:

  • ".... 我从服务器获得了 Ack,这导致它无限期地保持打开状态..." - TCP 级别的 ACK 与空闲超时无关在应用程序级别。 TCP keep alive 只是为了在中间防火墙中保持状态打开,即使没有数据传输也能实现连接丢失。

标签: go keep-alive


【解决方案1】:

这在 2011 年在 issue 2011(服务器端)中被提及,并在 commit ac213ab 中得到解决。
这允许将HTTP.Transport configuration 设置为DisableKeepAlives to true, and MaxIdleConnsPerHost to -1 并尊重这些设置。

但如果您需要更多地控制 TCP 连接,implementing an Hijackerin here 也是一个选项。

【讨论】:

    猜你喜欢
    • 2016-04-27
    • 1970-01-01
    • 2012-08-14
    • 1970-01-01
    • 1970-01-01
    • 2011-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多