当前位置: 首页 > 知识库问答 >
问题:

什么时候去http。重新使用tcp连接?

潘刚洁
2023-03-14

在GO-net/http响应中,主体注释表示:

打电话的人有责任把尸体关上。默认HTTP客户机的传输不会尝试重用HTTP/1.0或HTTP/1.1 TCP连接(“保持活动”),除非主体读取完成并关闭。

意思是:如果我用http。得到,不要打电话给resp。身体。关闭(),那么它将不会恢复HTTP/1.0或HTTP/1.1 TCP连接(保持活力),是吗?

所以我写了一些代码:

package main

导入 "时间" "fmt" "io/ioutil" "net/超文本传输协议" )

func main(){

if err != nil {
    panic(err)
}
_, err = ioutil.ReadAll(resp.Body)
if err != nil {
    panic(err)
}

resp2, err := http.Get("http://127.0.0.1:8588")

if err != nil {
    panic(err)
}
_, err = ioutil.ReadAll(resp2.Body)
if err != nil {
    panic(err)
}

fmt.Println("before time sleep")
time.Sleep(time.Second * 35)

}

共有2个答案

连德水
2023-03-14

你已经读到第一行的结尾了:

_, err = ioutil.ReadAll(resp.Body)

因此,连接已准备好恢复。试着不要再次阅读和运行。

苏鸿羽
2023-03-14

这个问题已在年内得到解决https://github.com/golang/go/issues/22954.

 类似资料:
  • 问题内容: 我想要的不是Redis和MongoDB之间的比较。我知道他们是不同的。性能和API完全不同。 Redis的速度非常快,但是API的“原子性”非常好。MongoDB将占用更多资源,但是该API非常易于使用,对此我感到非常满意。 它们都很棒,我想在部署中尽可能多地使用Redis,但是很难编写代码。我想在开发中尽可能多地使用MongoDB,但是它需要一台昂贵的机器。 那么您如何看待两者的使用

  • 问题内容: 奇怪的是: 似乎或多或少被定义为。通过这种方式很容易产生错误: 一些fname意外地以else块结尾。修复很简单,我们应该改用它,但是从表面上看,这似乎是一种不错的pythonic方式,并且比“正确”的方式更具可读性。 由于字符串是不可变的,所以为什么字符串错误是什么技术细节?什么时候进行身份检查更好,什么时候进行平等检查更好? 问题答案: 据我所知,检查对象身份是否相等。由于没有强制

  • 我正在研究TCP打孔技术,从这篇文章中得到了一些知识:TCP_HOLE_PUNCHING。但我不明白下面的部分: 这里有几个问题,谁能帮忙解释一下吗?如有任何帮助或建议,我们将不胜感激!! 假设我们有一个客户端应用程序运行在NAT1后面,一个服务器应用程序运行在NAT2后面。他们将有消息传递和文件传输通信。模式将是服务器监听并接受来自客户端的连接。他们需要使用TCP打孔来保持TCP连接工作吗? Q

  • 问题内容: 我有一个将客户发送到另一个站点来处理付款的应用程序。客户之外的另一个站点在我们的服务器上调用一个页面,让我们知道付款的状态。被调用页面会检查付款应用程序提供的参数,并检查我们是否知道该交易。然后,它更新数据库以反映状态。这一切都无需与客户进行任何互动即可完成。 我个人选择将此功能实现为JSP,因为将文件拖放到文件系统中比编译和打包文件然后将条目添加到配置文件中要容易得多。 考虑到页面的

  • 问题内容: 与 那两个工作正常。 使用连接池背后的想法是什么?什么时候使用? 问题答案: 从redis-py docs: 在后台,redis- py使用连接池来管理与Redis服务器的连接。默认情况下,您创建的每个Redis实例将依次创建自己的连接池。通过将已创建的连接池实例传递给Redis类的connection_pool参数,可以覆盖此行为并使用现有的连接池。您可以选择执行此操作,以实现客户端

  • 问题内容: 我怎么能说: 为什么函数调用中不需要括号,而最后一行呢? 问题答案: 是一个功能 调用该函数并产生该函数返回的任何值。 setTimeout的目的是在一段时间后运行代码。你需要的功能只是传递给它(这样的setTimeout可以自称在适当的时候函数),因为如果你将它传递给setTimeout的前调用的函数(用括号),将执行 现在 而不是1秒后,。