"github.com/miekg/dns"
pool "github.com/qydysky/part/pool"
- psync "github.com/qydysky/part/sync"
)
var (
}
type ConnPool struct {
- connMap *psync.Map
- pool *pool.Buf[ConnPoolItem]
+ pool *pool.Buf[ConnPoolItem]
}
type ConnPoolItem struct {
func NewConnPool(size int, genConn func() *net.Conn) *ConnPool {
return &ConnPool{
- connMap: new(psync.Map),
pool: pool.New(pool.PoolFunc[ConnPoolItem]{
New: func() *ConnPoolItem {
return &ConnPoolItem{p: genConn()}
}
func (t *ConnPool) Get(id string) (i net.Conn, putBack func()) {
- if conn, ok := t.connMap.LoadV(id).(*ConnPoolItem); ok {
- return *conn.p, func() {}
- } else {
- conn = t.pool.Get()
- t.connMap.Store(id, conn)
- return *conn.p, func() {
- t.connMap.Delete(id)
- t.pool.Put(conn)
- }
+ conn := t.pool.Get()
+ return *conn.p, func() {
+ t.pool.Put(conn)
}
}