aboutsummaryrefslogtreecommitdiff
path: root/peripconn.go
diff options
context:
space:
mode:
authorGravatar Aliaksandr Valialkin <valyala@gmail.com> 2016-03-30 20:34:07 +0300
committerGravatar Aliaksandr Valialkin <valyala@gmail.com> 2016-03-30 20:34:07 +0300
commit57cbe65ddca26e80d80b67b0891025b1907c7ddd (patch)
tree2dba7f9b115332ccf758afb06810e6ee9de1b7bc /peripconn.go
parentworkerpool: limit the number of connections each worker may serve. This shoul... (diff)
downloadfasthttp-57cbe65ddca26e80d80b67b0891025b1907c7ddd.tar.gz
fasthttp-57cbe65ddca26e80d80b67b0891025b1907c7ddd.tar.bz2
fasthttp-57cbe65ddca26e80d80b67b0891025b1907c7ddd.zip
scalability improvement: use per-server peripconn pool
Diffstat (limited to 'peripconn.go')
-rw-r--r--peripconn.go13
1 files changed, 6 insertions, 7 deletions
diff --git a/peripconn.go b/peripconn.go
index a8cb75e..afd2a92 100644
--- a/peripconn.go
+++ b/peripconn.go
@@ -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)