gitee.com/quant1x/gox@v1.21.2/pool/README_ZH_CN.md (about)

     1  # pool
     2  [![PkgGoDev](https://pkg.go.dev/badge/github.com/silenceper/pool)](https://pkg.go.dev/github.com/silenceper/pool)
     3  [![Go Report Card](https://goreportcard.com/badge/github.com/silenceper/pool)](https://goreportcard.com/report/github.com/silenceper/pool)
     4  
     5  Golang 实现的连接池
     6  
     7  
     8  ## 功能:
     9  
    10  - 连接池中连接类型为`interface{}`,使得更加通用
    11  - 连接的最大空闲时间,超时的连接将关闭丢弃,可避免空闲时连接自动失效问题
    12  - 支持用户设定 ping 方法,检查连接的连通性,无效的连接将丢弃
    13  - 使用channel处理池中的连接,高效
    14  
    15  ## 基本用法
    16  
    17  ```go
    18  
    19  //factory 创建连接的方法
    20  factory := func() (interface{}, error) { return net.Dial("tcp", "127.0.0.1:4000") }
    21  
    22  //close 关闭连接的方法
    23  close := func(v interface{}) error { return v.(net.Conn).Close() }
    24  
    25  //ping 检测连接的方法
    26  //ping := func(v interface{}) error { return nil }
    27  
    28  //创建一个连接池: 初始化5,最大空闲连接是20,最大并发连接30
    29  poolConfig := &pool.Config{
    30  	InitialCap: 5,//资源池初始连接数
    31  	MaxIdle:   20,//最大空闲连接数
    32  	MaxCap:     30,//最大并发连接数
    33  	Factory:    factory,
    34  	Close:      close,
    35  	//Ping:       ping,
    36  	//连接最大空闲时间,超过该时间的连接 将会关闭,可避免空闲时连接EOF,自动失效的问题
    37  	IdleTimeout: 15 * time.Second,
    38  }
    39  p, err := pool.NewChannelPool(poolConfig)
    40  if err != nil {
    41  	fmt.Println("err=", err)
    42  }
    43  
    44  //从连接池中取得一个连接
    45  v, err := p.Get()
    46  
    47  //do something
    48  //conn=v.(net.Conn)
    49  
    50  //将连接放回连接池中
    51  p.Put(v)
    52  
    53  //释放连接池中的所有连接
    54  p.Release()
    55  
    56  //查看当前连接中的数量
    57  current := p.Len()
    58  
    59  
    60  ```
    61  
    62  
    63  #### 注:
    64  该连接池参考 [https://github.com/fatih/pool](https://github.com/fatih/pool) 实现,改变以及增加原有的一些功能。
    65  
    66  
    67  ## License
    68  
    69  The MIT License (MIT) - see LICENSE for more details