5

我知道 Go 语言中的 http.Client 有 Transport 类型的连接池

但是 http.Server 中没有传输

我希望访问服务器的池。

  1. 列出所有连接
  2. 关闭连接/从池中删除它们

更新

我正在学习 Go 源代码 https://code.google.com/p/go/source/browse/src/pkg/net/http/server.go#1087

看来这个函数有没有Pool的答案。

可能有人知道如何覆盖该功能?我必须创建一个包的孔副本吗?

4

2 回答 2

3

我在 go-nuts 邮件列表上得到了答复。

https://groups.google.com/forum/#!topic/golang-nuts/eoBsx0Sl3Co

  1. 传输在服务器中不可用(仅在客户端)
  2. 我可以通过我自己的 net.Listener
  3. LimitListener 就是这样的实现之一。 https://code.google.com/p/go/source/browse/netutil/listen.go?repo=net
于 2013-10-05T19:17:12.267 回答
1

编辑:请注意,传输结构对应于 http 客户端,而不是 http 服务器

Transport 结构在这里:https ://code.google.com/p/go/source/browse/src/pkg/net/http/transport.go

在该结构中,有一些感兴趣的成员:

idleConn
idleConnCh
reqConn

我认为严格来说,这就是您要问的问题。

然而,那些并没有被导出,很明显作者并不打算从其他包中修改这些。

我建议看一下CloseIdleConnectionsCancelRequest-那些似乎是处理连接池的导出函数,也许可以解决您的部分问题。

否则,您基本上会反对“它不是为了这样做而设计的”。显然(有人可能会过来纠正我,但我还没有看到如何)无法以一种方式扩展内置类型,让您访问仅在其包中可见的成员(即开始的成员小写字母)。http这意味着如果不修改包的源(或复制它并自己制作),您将无法访问 Transport 结构的这些成员。

于 2013-10-04T23:19:07.767 回答