Golang 建立TCP时使用连接池

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Golang 建立TCP时使用连接池相关的知识,希望对你有一定的参考价值。

参考技术A 程序输出如下,相比不用连接池,单次操作时间少了一个数量级。

Golang 通用连接池

资源链接 

  1. pool


  2. GoDoc


  3. Golang 实现的连接池


  4. 功能:


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

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

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

  8. 基本用法


  9. //factory 创建连接的方法

  10. factory := func() (interface{}, error) { return net.Dial("tcp", "127.0.0.1:4000") }


  11. //close 关闭链接的方法

  12. close := func(v interface{}) error { return v.(net.Conn).Close() }


  13. //创建一个连接池: 初始化5,最大链接30

  14. poolConfig := &pool.PoolConfig{

  15.     InitialCap: 5,

  16.     MaxCap:     30,

  17.     Factory:    factory,

  18.     Close:      close,

  19.     //链接最大空闲时间,超过该时间的链接 将会关闭,可避免空闲时链接EOF,自动失效的问题

  20.     IdleTimeout: 15 * time.Second,

  21. }

  22. p, err := pool.NewChannelPool(poolConfig)

  23. if err != nil {

  24.     fmt.Println("err=", err)

  25. }


  26. //从连接池中取得一个链接

  27. v, err := p.Get()


  28. //do something

  29. //conn=v.(net.Conn)


  30. //将链接放回连接池中

  31. p.Put(v)


  32. //释放连接池中的所有链接

  33. p.Release()


  34. //查看当前链接中的数量

  35. current := p.Len()


  36. 注:


  37. 该连接池参考 https://github.com/fatih/pool 实现,改变以及增加原有的一些功能


以上是关于Golang 建立TCP时使用连接池的主要内容,如果未能解决你的问题,请参考以下文章

Golang 通用连接池

TCP连接及连接池管理

golang长连接和短连接的那些事儿

golang 连接池mysql

golang 连接池mysql

面试官:如何实现一个连接池,我当场懵了