Golang 通用连接池库 Golang-Pool

MIT
Google Go 查看源码»
跨平台
2016-11-25
silenceper

Golang 实现的连接池

功能:

  • 连接池中连接类型为interface{},使得更加通用

  • 链接的最大空闲时间,超时的链接将关闭丢弃,可避免空闲时链接自动失效问题

  • 使用channel处理池中的链接,高效

基本用法

//factory 创建连接的方法
factory := func() (interface{}, error) { return net.Dial("tcp", "127.0.0.1:4000") }

//close 关闭链接的方法
close := func(v interface{}) error { return v.(net.Conn).Close() }

//创建一个连接池: 初始化5,最大链接30
poolConfig := &pool.PoolConfig{
    InitialCap: 5,
    MaxCap:     30,
    Factory:    factory,
    Close:      close,
    //链接最大空闲时间,超过该时间的链接 将会关闭,可避免空闲时链接EOF,自动失效的问题
    IdleTimeout: 15 * time.Second,
}
p, err := pool.NewChannelPool(poolConfig)
if err != nil {
    fmt.Println("err=", err)
}

//从连接池中取得一个链接
v, err := p.Get()

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

//将链接放回连接池中
p.Put(v)

//释放连接池中的所有链接
p.Release()

//查看当前链接中的数量
current := p.Len()
的码云指数为
超过 的项目
加载中

评论(0)

暂无评论

暂无资讯

1
回答
golang mysql exec方法引起连接池不释放
GotaX 的回答 03/20 13:22
最佳答案
是不是 300 个并发 query 先把连接耗尽了, 然后大家都卡在 exec 那儿了. 如果是并发读写数据库的话最好用 channel 控制一下生产消费者的数量.

没有更多内容

加载失败,请刷新页面

没有更多内容

Golang空接口的小技巧应用

最近在用golang写一个框架,希望可以比较灵活地构建一个方法,可以接受任意类型的输入,这样首先想到的是使用空接口interface{},因为在golang里面没有泛型。 空接口例子一: type download ...

2018/12/28 22:08
7
0
golang sync.Pool 使用和源码分析

golang 在写高频服务的时候,如何解决gc问题,对象池是一个很有效果的方式,本文阐述下对象池的两种使用方式,和对对象池的源码分析,以及使用pool 的要点。golang 的对象池源码在避免锁竞争...

2018/06/12 10:26
711
0
golang手动管理内存

作者:John Graham-Cumming. 原文点击此处。翻译:Lubia Yang 前些天我介绍了我们对Lua的使用,implement our new Web Application Firewall. 另一种在CloudFlare (作者的公司)变得非常流行...

2013/11/09 11:28
7.4K
2
golang连接mysql操作及动态连接池设置

golang连接mysql操作及动态连接池设置

2018/03/02 13:46
1K
0
高性能golang后端处理网络模块包

高性能golang后端处理网络模块包 一个用golang写的高性能后端处理模块包 支持常见的网络协议, 包括HTTP, TCP, UDP等. Job\Worker 网络处理模型, 同时并行异步处理 使用原生的golang chan...

2018/09/26 17:22
122
0
Goroutine并发调度模型深度解析&手撸一个协程池

并发(并行),一直以来都是一个编程语言里的核心主题之一,也是被开发者关注最多的话题;Go语言作为一个出道以来就自带 『高并发』光环的富二代编程语言,它的并发(并行)编程肯定是值得开...

2018/07/01 09:05
46
0

没有更多内容

加载失败,请刷新页面

返回顶部
顶部