mirror of
https://github.com/valyala/fasthttp.git
synced 2026-06-16 16:17:38 +03:00
Use perIPConn pool
This commit is contained in:
@@ -42,11 +42,35 @@ type perIPConn struct {
|
||||
|
||||
ip uint32
|
||||
perIPConnCounter *perIPConnCounter
|
||||
|
||||
v interface{}
|
||||
}
|
||||
|
||||
func acquirePerIPConn(conn net.Conn, ip uint32, counter *perIPConnCounter) *perIPConn {
|
||||
v := perIPConnPool.Get()
|
||||
if v == nil {
|
||||
v = &perIPConn{}
|
||||
}
|
||||
c := v.(*perIPConn)
|
||||
c.Conn = conn
|
||||
c.ip = ip
|
||||
c.perIPConnCounter = counter
|
||||
c.v = v
|
||||
return c
|
||||
}
|
||||
|
||||
func releasePerIPConn(c *perIPConn) {
|
||||
c.Conn = nil
|
||||
c.perIPConnCounter = nil
|
||||
perIPConnPool.Put(c.v)
|
||||
}
|
||||
|
||||
var perIPConnPool sync.Pool
|
||||
|
||||
func (c *perIPConn) Close() error {
|
||||
err := c.Conn.Close()
|
||||
c.perIPConnCounter.Unregister(c.ip)
|
||||
releasePerIPConn(c)
|
||||
return err
|
||||
}
|
||||
|
||||
|
||||
@@ -413,11 +413,7 @@ func wrapPerIPConn(s *Server, c net.Conn) net.Conn {
|
||||
s.perIPConnCounter.Unregister(ip)
|
||||
return nil
|
||||
}
|
||||
return &perIPConn{
|
||||
Conn: c,
|
||||
ip: ip,
|
||||
perIPConnCounter: &s.perIPConnCounter,
|
||||
}
|
||||
return acquirePerIPConn(c, ip, &s.perIPConnCounter)
|
||||
}
|
||||
|
||||
var defaultLogger = Logger(log.New(os.Stderr, "", log.LstdFlags))
|
||||
|
||||
Reference in New Issue
Block a user