May 18, 2019

358 words 2 mins read

Broadroad/gpool

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

gpoolGoDoc Build Status

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

Contributor

comments powered by Disqus