README
Pool

Pool is a thread safe connection pool for net.Conn interface. It can be used to manage and reuse connections.
Install and Usage
Install the package with:
go get github.com/fatih/pool
Please vendor the package with one of the releases: https://github.com/fatih/pool/releases.
master
branch is development branch and will contain always the latest changes.
Example
// create a factory() to be used with channel based pool
factory := func() (net.Conn, error) { return net.Dial("tcp", "127.0.0.1:4000") }
// create a new channel based pool with an initial capacity of 5 and maximum
// capacity of 30. The factory will create 5 initial connections and put it
// into the pool.
p, err := pool.NewChannelPool(5, 30, factory)
// now you can get a connection from the pool, if there is no connection
// available it will create a new one via the factory function.
conn, err := p.Get()
// do something with conn and put it back to the pool by closing the connection
// (this doesn't close the underlying connection instead it's putting it back
// to the pool).
conn.Close()
// close the underlying connection instead of returning it to pool
// it is useful when acceptor has already closed connection and conn.Write() returns error
if pc, ok := conn.(*pool.PoolConn); ok {
pc.MarkUnusable()
pc.Close()
}
// close pool any time you want, this closes all the connections inside a pool
p.Close()
// currently available connections in the pool
current := p.Len()
Credits
License
The MIT License (MIT) - see LICENSE for more details
Documentation
Overview ¶
Package pool implements a pool of net.Conn interfaces to manage and reuse them.
Index ¶
Constants ¶
Variables ¶
var ( // ErrClosed is the error resulting if the pool is closed via pool.Close(). ErrClosed = errors.New("pool is closed") )
Functions ¶
Types ¶
type Pool ¶
type Pool interface { // Get returns a new connection from the pool. Closing the connections puts // it back to the Pool. Closing it when the pool is destroyed or full will // be counted as an error. Get() (net.Conn, error) // Close closes the pool and all its connections. After Close() the pool is // no longer usable. Close() // Len returns the current number of connections of the pool. Len() int }
Pool interface describes a pool implementation. A pool should have maximum capacity. An ideal pool is threadsafe and easy to use.
func NewChannelPool ¶
NewChannelPool returns a new pool based on buffered channels with an initial capacity and maximum capacity. Factory is used when initial capacity is greater than zero to fill the pool. A zero initialCap doesn't fill the Pool until a new Get() is called. During a Get(), If there is no new connection available in the pool, a new connection will be created via the Factory() method.
type PoolConn ¶
PoolConn is a wrapper around net.Conn to modify the the behavior of net.Conn's Close() method.
func (*PoolConn) MarkUnusable ¶
func (p *PoolConn) MarkUnusable()
MarkUnusable() marks the connection not usable any more, to let the pool close it instead of returning it to pool.