我知道 Go 语言中的 http.Client 有 Transport 类型的连接池
但是 http.Server 中没有传输
我希望访问服务器的池。
- 列出所有连接
- 关闭连接/从池中删除它们
更新
我正在学习 Go 源代码 https://code.google.com/p/go/source/browse/src/pkg/net/http/server.go#1087
看来这个函数有没有Pool的答案。
可能有人知道如何覆盖该功能?我必须创建一个包的孔副本吗?
我知道 Go 语言中的 http.Client 有 Transport 类型的连接池
但是 http.Server 中没有传输
我希望访问服务器的池。
更新
我正在学习 Go 源代码 https://code.google.com/p/go/source/browse/src/pkg/net/http/server.go#1087
看来这个函数有没有Pool的答案。
可能有人知道如何覆盖该功能?我必须创建一个包的孔副本吗?
我在 go-nuts 邮件列表上得到了答复。
https://groups.google.com/forum/#!topic/golang-nuts/eoBsx0Sl3Co
编辑:请注意,传输结构对应于 http 客户端,而不是 http 服务器
Transport 结构在这里:https ://code.google.com/p/go/source/browse/src/pkg/net/http/transport.go
在该结构中,有一些感兴趣的成员:
idleConn
idleConnCh
reqConn
我认为严格来说,这就是您要问的问题。
然而,那些并没有被导出,很明显作者并不打算从其他包中修改这些。
我建议看一下CloseIdleConnections
,CancelRequest
-那些似乎是处理连接池的导出函数,也许可以解决您的部分问题。
否则,您基本上会反对“它不是为了这样做而设计的”。显然(有人可能会过来纠正我,但我还没有看到如何)无法以一种方式扩展内置类型,让您访问仅在其包中可见的成员(即开始的成员小写字母)。http
这意味着如果不修改包的源(或复制它并自己制作),您将无法访问 Transport 结构的这些成员。