使用https的golang http客户端空闲

使用https的golang http客户端空闲,go,httpclient,Go,Httpclient,我有一个http客户端空闲测试,如果我运行它,我总是通过https conn获得空闲conn。 日志在下面 === RUN TestWithOneClient2 work1 start work1 Connection reused for {Conn:0xc0000a8058 Reused:false WasIdle:false IdleTime:0s} ,172.26.33.1:49356 => 58.250.137.36:80 work1 PutIdleConn: <nil

我有一个http客户端空闲测试,如果我运行它,我总是通过https conn获得空闲conn。 日志在下面

=== RUN   TestWithOneClient2
work1 start
work1 Connection reused for {Conn:0xc0000a8058 Reused:false WasIdle:false IdleTime:0s} ,172.26.33.1:49356 => 58.250.137.36:80
work1 PutIdleConn: <nil>
work1 Connection reused for {Conn:0xc00006e000 Reused:false WasIdle:false IdleTime:0s} ,172.26.33.1:49357 => 58.250.137.36:443
work1 resp.Proto: HTTP/2.0 false
work1 start
work1 Connection reused for {Conn:0xc000010050 Reused:false WasIdle:false IdleTime:0s} ,172.26.33.1:49358 => 58.250.137.36:80
work1 PutIdleConn: <nil>
work1 Connection reused for {Conn:0xc00006e000 Reused:true WasIdle:true IdleTime:1.069584516s} ,172.26.33.1:49357 => 58.250.137.36:443
work1 resp.Proto: HTTP/2.0 false

work2 start
work2 Connection reused for {Conn:0xc0000a8020 Reused:false WasIdle:false IdleTime:0s} ,172.26.33.1:49359 => 35.170.21.246:80
work2 resp.Proto: HTTP/1.1 false
work2 PutIdleConn: <nil>

work1 start
work1 Connection reused for {Conn:0xc000136000 Reused:false WasIdle:false IdleTime:0s} ,172.26.33.1:49360 => 58.250.137.36:80
work1 PutIdleConn: <nil>
work1 Connection reused for {Conn:0xc00006e000 Reused:true WasIdle:true IdleTime:2.582808258s} ,172.26.33.1:49357 => 58.250.137.36:443
work1 resp.Proto: HTTP/2.0 false
--- PASS: TestWithOneClient2 (5.46s)
PASS
我发现如果我更改
work1
请求url为
https://www.qq.com
其工作原理如下所示

=== RUN   TestWithOneClient2
work1 start
work1 Connection reused for {Conn:0xc0000a2000 Reused:false WasIdle:false IdleTime:0s} ,172.26.33.1:49383 => 58.250.137.36:443
work1 resp.Proto: HTTP/2.0 false
work1 start
work1 Connection reused for {Conn:0xc0000a2000 Reused:true WasIdle:true IdleTime:1.005156698s} ,172.26.33.1:49383 => 58.250.137.36:443
work1 resp.Proto: HTTP/2.0 false

work2 start
work2 Connection reused for {Conn:0xc00009e020 Reused:false WasIdle:false IdleTime:0s} ,172.26.33.1:49384 => 3.221.81.55:80
work2 resp.Proto: HTTP/1.1 false
work2 PutIdleConn: <nil>

work1 start
work1 Connection reused for {Conn:0xc0000a2000 Reused:true WasIdle:true IdleTime:2.491818827s} ,172.26.33.1:49383 => 58.250.137.36:443
work1 resp.Proto: HTTP/2.0 false
--- PASS: TestWithOneClient2 (5.03s)
PASS
==使用一个客户端运行测试2
工作1开始
为{Conn:0xc000a2000 reused:false WasIdle:false IdleTime:0s}重用的工作1连接,172.26.33.1:49383=>58.250.137.36:443
工作1响应协议:HTTP/2.0错误
工作1开始
为{Conn:0xc000a2000 reused:true WasIdle:true IdleTime:1.005156698s}重用的工作1连接,172.26.33.1:49383=>58.250.137.36:443
工作1响应协议:HTTP/2.0错误
工作2开始
为{Conn:0xc00009e020重用的work2连接:false WasIdle:false IdleTime:0s},172.26.33.1:49384=>3.221.81.55:80
work2响应协议:HTTP/1.1 false
工作2 Putidlecon:
工作1开始
为{Conn:0xc000a2000 reused:true WasIdle:true IdleTime:2.491818827s}重用的工作1连接,172.26.33.1:49383=>58.250.137.36:443
工作1响应协议:HTTP/2.0错误
---通过:TestWithOneClient2(5.03s)
通过
它看起来总是在康涅狄格州

添加问题

我读了代码http/transport.go
cc获取https连接,错误:=t.connPool().GetClientConn(req,addr)


http连接从
idlecon映射[connectMethodKey][]*persistConn

他们之间似乎没有什么影响。

但是为什么它不能重用最后一个http连接。

“为什么ilde连接是https而不是最后一个连接?”您能尝试重新表述这个问题吗?我真的不明白你想问什么。“它看起来总是在康涅狄格州吗?”是的。你感到惊讶吗?如果是,为什么?我重新编辑了它。我想知道为什么它不能重用HTTP连接@我会更仔细地阅读代码@彼得
=== RUN   TestWithOneClient2
work1 start
work1 Connection reused for {Conn:0xc0000a2000 Reused:false WasIdle:false IdleTime:0s} ,172.26.33.1:49383 => 58.250.137.36:443
work1 resp.Proto: HTTP/2.0 false
work1 start
work1 Connection reused for {Conn:0xc0000a2000 Reused:true WasIdle:true IdleTime:1.005156698s} ,172.26.33.1:49383 => 58.250.137.36:443
work1 resp.Proto: HTTP/2.0 false

work2 start
work2 Connection reused for {Conn:0xc00009e020 Reused:false WasIdle:false IdleTime:0s} ,172.26.33.1:49384 => 3.221.81.55:80
work2 resp.Proto: HTTP/1.1 false
work2 PutIdleConn: <nil>

work1 start
work1 Connection reused for {Conn:0xc0000a2000 Reused:true WasIdle:true IdleTime:2.491818827s} ,172.26.33.1:49383 => 58.250.137.36:443
work1 resp.Proto: HTTP/2.0 false
--- PASS: TestWithOneClient2 (5.03s)
PASS