Broadroad/gpool
A golang resource pool which will support connection pool, buffer pool, goroutine pool. Now only support connection pool.
repo name | Broadroad/gpool |
repo link | https://github.com/Broadroad/gpool |
homepage | |
language | Go |
size (curr.) | 91 kB |
stars (curr.) | 275 |
created | 2018-07-14 |
license | Apache License 2.0 |
gpool
A golang pool which will support connection pool, buffer pool, goroutine pool. Help developers to use pool easily. Now gpool only support tcp connection pool. It will support other pools soon. And Thanks to https://github.com/fatih/pool, ideas comes from fatih.
Function
- gpool support tcp connection now
- reuse tcp connection in gpool
- get connection from gpool will error when there is no idle connection in gpool
- support block get from gpool when there is no idle connection in gpool with timeout
Todo
- support lazy connect when real borrow conn from gpool
- support buffer pool
- support goroutine pool
Usage
1. install with this command:
go get github.com/broadroad/gpool
2. set the poolConfig:
// create factory to create connection
factory = func() (net.Conn, error) { return net.Dial(network, address) }
// create poolConfig
poolConfig = &PoolConfig{
InitCap: 5,
MaxCap: 30,
Factory: factory,
}
3. create new gpool
// create a new gpool
p, err := NewGPool(poolConfig)
if err != nil {
fmt.Println(err)
}
// release all connection in gpool
defer p.Close()
4. non blocking get, if no idle connection then return error.
// get a connection from gpool, if gpool has no idle connection, it will return error
conn, err := p.Get()
if err != nil {
fmt.Println("Get error: ", err)
}
// return a connection to gpool
defer conn.Close()
5. blocking get, if no idle connection then block until a timeout
5.1 Block until specified timeout
ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second) //3second timeout
defer cancel()
conn, err := p.BlockingGet(ctx)
if err != nil {
fmt.Println("Get error:", err)
}
// return a connection to gpool
defer conn.Close()
5.2 Block indefinitely
conn, err := p.BlockingGet(nil)
if err != nil {
fmt.Println("Get error:", err)
}
// return a connection to gpool
defer conn.Close()
License
The Apache License 2.0 - see LICENSE for more details
Issue
It will be very pleasure if you give some issue or pr. Feel free to contact tjbroadroad@163.com