mirror of https://github.com/ouqiang/gocron
63 lines
1.4 KiB
Markdown
63 lines
1.4 KiB
Markdown
|
# pool
|
|||
|
[![GoDoc](http://godoc.org/github.com/silenceper/pool?status.svg)](http://godoc.org/github.com/silenceper/pool)
|
|||
|
|
|||
|
Golang 实现的连接池
|
|||
|
|
|||
|
|
|||
|
##功能:
|
|||
|
|
|||
|
- 连接池中连接类型为`interface{}`,使得更加通用
|
|||
|
- 链接的最大空闲时间,超时的链接将关闭丢弃,可避免空闲时链接自动失效问题
|
|||
|
- 使用channel处理池中的链接,高效
|
|||
|
|
|||
|
## 基本用法
|
|||
|
|
|||
|
```go
|
|||
|
|
|||
|
//factory 创建连接的方法
|
|||
|
factory := func() (interface{}, error) { return net.Dial("tcp", "127.0.0.1:4000") }
|
|||
|
|
|||
|
//close 关闭链接的方法
|
|||
|
close := func(v interface{}) error { return v.(net.Conn).Close() }
|
|||
|
|
|||
|
//创建一个连接池: 初始化5,最大链接30
|
|||
|
poolConfig := &pool.PoolConfig{
|
|||
|
InitialCap: 5,
|
|||
|
MaxCap: 30,
|
|||
|
Factory: factory,
|
|||
|
Close: close,
|
|||
|
//链接最大空闲时间,超过该时间的链接 将会关闭,可避免空闲时链接EOF,自动失效的问题
|
|||
|
IdleTimeout: 15 * time.Second,
|
|||
|
}
|
|||
|
p, err := pool.NewChannelPool(poolConfig)
|
|||
|
if err != nil {
|
|||
|
fmt.Println("err=", err)
|
|||
|
}
|
|||
|
|
|||
|
//从连接池中取得一个链接
|
|||
|
v, err := p.Get()
|
|||
|
|
|||
|
//do something
|
|||
|
//conn=v.(net.Conn)
|
|||
|
|
|||
|
//将链接放回连接池中
|
|||
|
p.Put(v)
|
|||
|
|
|||
|
//释放连接池中的所有链接
|
|||
|
p.Release()
|
|||
|
|
|||
|
//查看当前链接中的数量
|
|||
|
current := p.Len()
|
|||
|
|
|||
|
|
|||
|
```
|
|||
|
|
|||
|
|
|||
|
####注:
|
|||
|
该连接池参考 [https://github.com/fatih/pool](https://github.com/fatih/pool) 实现,改变以及增加原有的一些功能。
|
|||
|
|
|||
|
|
|||
|
## License
|
|||
|
|
|||
|
The MIT License (MIT) - see LICENSE for more details
|