pool

package
v1.0.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 23, 2021 License: MIT, MIT Imports: 5 Imported by: 0

README

Pool is a thread safe connection pool for net.Conn interface. It can be used to manage and reuse connections.

It started out based on github.com/fatih/pool but has diverged in goals.

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, blocking)

// 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.Release()

// If the connetion turns out to be faulty. Close it and don't put it
// back.
conn.Close()

// close pool any time you want, this closes all the connections inside a pool
p.Close()

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

This section is empty.

Variables

View Source
var (
	// ErrClosed is the error resulting if the pool is closed via pool.Close().
	ErrClosed = errors.New("pool is closed")
)

Functions

This section is empty.

Types

type Factory

type Factory func() (net.Conn, error)

Factory is a function to create new connections.

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.
	// The "fresh" return indicates whether this connection is newly minted and expected
	// not to be failing.
	Get() (conn *PoolConn, fresh bool, err error)

	// Close closes the pool and all its connections. After Close() the pool is
	// no longer usable.
	Close()
}

Pool interface describes a pool implementation. A pool should have maximum capacity. An ideal pool is threadsafe and easy to use.

func NewChannelPool

func NewChannelPool(idleSize int, maxSize int, factory Factory, blocking bool) (Pool, error)

NewChannelPool returns a new pool based on buffered channels with an idle capacity and maximum capacity. Factory is used when initial capacity is greater than zero to fill the pool. If there is no new connection available in the pool, a new connection will be created via the Factory() method. If blocking is true, Get() block until there's a connection available when the pool is full If blocking is false, Get() returns an error.

type PoolConn

type PoolConn struct {
	net.Conn
	// contains filtered or unexported fields
}

PoolConn is a wrapper around net.Conn to modify the the behavior of net.Conn's Close() method.

func (PoolConn) Close

func (pc PoolConn) Close() error

Close closes the net.Conn and discards it as broken.

func (PoolConn) Release

func (pc PoolConn) Release() error

Release puts the net.Conn back to the pool instead of closing it.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL