golang vconnpool,可以TCP连接复用,使用方法和 net.Dialer 接口是相同。
type Dialer interface { // net.Dialer 接口
Dial(network, address string) (net.Conn, error) // 拨号
DialContext(ctx context.Context, network, address string) (net.Conn, error) // 拨号(支持上下文)
}
type Conn interface{ // 连接接口
net.Conn // net连接接口
Discard() error // 废弃(这条连接不再回收)
IsReuseConn() bool // 判断这条连接是否是从池中读取出来的
}
type ConnPool struct { // 连接池
*net.Dialer // 拨号
IdeConn int // 空闲连接数,0为不复用连接
MaxConn int // 最大连接数,0为无限制连接
}
func (cp *ConnPool) Dial(network, address string) (net.Conn, error) // 拨号,如果 address 参数是host域名,.Get(...)将无法读取到连接。请再次使用 .Dial(...) 来读取。
func (cp *ConnPool) DialContext(ctx context.Context, network, address string) (net.Conn, error) //拨号(支持上下文),如果 address 参数是host域名,.Get(...)将无法读取到连接。请再次使用 .Dial(...) 来读取。
func (cp *ConnPool) Add(addr net.Addr, conn net.Conn) error // 增加连接
func (cp *ConnPool) Get(addr net.Addr) (net.Conn, error) // 读取连接,读取出来的连接不会自动回收,需要调用 .Add(...) 收入
func (cp *ConnPool) ConnNum() int // 当前连接数量
func (cp *ConnPool) ConnNumIde(network, address string) int // 当前连接数量(空闲)
func (cp *ConnPool) CloseIdleConnections() // 关闭空闲连接
func (cp *ConnPool) Close() error // 关闭连接池