pool

package
v1.21.2 Latest Latest
Warning

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

Go to latest
Published: May 16, 2024 License: Apache-2.0, MIT Imports: 5 Imported by: 3

README

pool

PkgGoDev Go Report Card

中文文档

A golang universal network connection pool.

Feature:

  • More versatile, The connection type in the connection pool is interface{}, making it more versatile
  • More configurable, The connection supports setting the maximum idle time, the timeout connection will be closed and discarded, which can avoid the problem of automatic connection failure when idle
  • Support user setting ping method, used to check the connectivity of connection, invalid connection will be discarded
  • Support connection waiting, When the connection pool is full, support for connection waiting (like the go db connection pool)

Basic Usage:


//factory Specify the method to create the connection
factory := func() (interface{}, error) { return net.Dial("tcp", "127.0.0.1:4000") }

//close Specify the method to close the connection
close := func(v interface{}) error { return v.(net.Conn).Close() }

//ping Specify the method to detect whether the connection is invalid
//ping := func(v interface{}) error { return nil }

//Create a connection pool: Initialize the number of connections to 5, the maximum idle connection is 20, and the maximum concurrent connection is 30
poolConfig := &pool.Config{
	InitialCap: 5,
	MaxIdle:   20,
	MaxCap:     30,
	Factory:    factory,
	Close:      close,
	//Ping:       ping,
	//The maximum idle time of the connection, the connection exceeding this time will be closed, which can avoid the problem of automatic failure when connecting to EOF when idle
	IdleTimeout: 15 * time.Second,
}
p, err := pool.NewChannelPool(poolConfig)
if err != nil {
	fmt.Println("err=", err)
}

//Get a connection from the connection pool
v, err := p.Get()

//do something
//conn=v.(net.Conn)

//Put the connection back into the connection pool, when the connection is no longer in use
p.Put(v)

//Release all connections in the connection pool, when resources need to be destroyed
p.Release()

//View the number of connections in the current connection pool
current := p.Len()


Remarks:

The connection pool implementation refers to pool https://github.com/fatih/pool , thanks.

License

The MIT License (MIT) - see LICENSE for more details

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	//ErrMaxActiveConnReached 连接池超限
	ErrMaxActiveConnReached = errors.New("max active conn reached")
	// ErrClosed 连接已关闭
	ErrClosed = errors.New("pool is closed")
	// ErrIsNil 连接无效
	ErrIsNil = errors.New("connection is nil. rejecting")
)

Functions

This section is empty.

Types

type Config

type Config struct {
	//连接池中拥有的最小连接数
	InitialCap int
	//最大并发存活连接数
	MaxCap int
	//最大空闲连接
	MaxIdle int
	//生成连接的方法
	Factory func() (any, error)
	//关闭连接的方法
	Close func(any) error
	//检查连接是否有效的方法
	Ping func(any) error
	//连接最大空闲时间,超过该事件则将失效
	IdleTimeout time.Duration
}

Config 连接池相关配置

type Pool

type Pool interface {
	// Get 获取一个连接
	Get() (any, error)
	// Put 归还一个连接
	Put(any) error
	// Close 关闭连接
	Close(any) error
	// CloseAll 关闭全部连接
	CloseAll()
	// Release 释放连接池
	Release()
	// Len 连接数
	Len() int
}

Pool 基本方法

func NewChannelPool

func NewChannelPool(poolConfig *Config) (Pool, error)

NewChannelPool 初始化连接

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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