mirror of
https://github.com/valyala/fasthttp.git
synced 2026-06-13 15:46:49 +03:00
scalability improvement: use per-server peripconn pool
This commit is contained in:
+6
-7
@@ -7,6 +7,7 @@ import (
|
||||
)
|
||||
|
||||
type perIPConnCounter struct {
|
||||
pool sync.Pool
|
||||
lock sync.Mutex
|
||||
m map[uint32]int
|
||||
}
|
||||
@@ -45,25 +46,23 @@ type perIPConn struct {
|
||||
}
|
||||
|
||||
func acquirePerIPConn(conn net.Conn, ip uint32, counter *perIPConnCounter) *perIPConn {
|
||||
v := perIPConnPool.Get()
|
||||
v := counter.pool.Get()
|
||||
if v == nil {
|
||||
v = &perIPConn{}
|
||||
v = &perIPConn{
|
||||
perIPConnCounter: counter,
|
||||
}
|
||||
}
|
||||
c := v.(*perIPConn)
|
||||
c.Conn = conn
|
||||
c.ip = ip
|
||||
c.perIPConnCounter = counter
|
||||
return c
|
||||
}
|
||||
|
||||
func releasePerIPConn(c *perIPConn) {
|
||||
c.Conn = nil
|
||||
c.perIPConnCounter = nil
|
||||
perIPConnPool.Put(c)
|
||||
c.perIPConnCounter.pool.Put(c)
|
||||
}
|
||||
|
||||
var perIPConnPool sync.Pool
|
||||
|
||||
func (c *perIPConn) Close() error {
|
||||
err := c.Conn.Close()
|
||||
c.perIPConnCounter.Unregister(c.ip)
|
||||
|
||||
Reference in New Issue
Block a user