mirror of
https://github.com/kataras/iris.git
synced 2025-02-02 15:30:36 +01:00
replace time.Ticker
with time.Sleep
in websocket pinger
Websocket: replaced time.Ticker with sleep for avoid memory leak Former-commit-id: 75470549033c286a0d3cbfb094cc298e6ffa9e83
This commit is contained in:
commit
dd5b293011
|
@ -196,7 +196,6 @@ type (
|
|||
underline UnderlineConnection
|
||||
id string
|
||||
messageType int
|
||||
pinger *time.Ticker
|
||||
disconnected bool
|
||||
onDisconnectListeners []DisconnectFunc
|
||||
onRoomLeaveListeners []LeaveRoomFunc
|
||||
|
@ -298,17 +297,18 @@ func (c *connection) startPinger() {
|
|||
|
||||
c.underline.SetPingHandler(pingHandler)
|
||||
|
||||
// start a new timer ticker based on the configuration
|
||||
c.pinger = time.NewTicker(c.server.config.PingPeriod)
|
||||
|
||||
go func() {
|
||||
for {
|
||||
// wait for each tick
|
||||
<-c.pinger.C
|
||||
// using sleep avoids the ticker error that causes a memory leak
|
||||
time.Sleep(c.server.config.PingPeriod)
|
||||
if c.disconnected {
|
||||
// verifies if already disconected
|
||||
break
|
||||
}
|
||||
// try to ping the client, if failed then it disconnects
|
||||
err := c.write(websocket.PingMessage, []byte{})
|
||||
if err!=nil{
|
||||
//must stop to exit the loop and finish the go routine
|
||||
if err != nil {
|
||||
// must stop to exit the loop and finish the go routine
|
||||
break
|
||||
}
|
||||
}
|
||||
|
|
|
@ -378,8 +378,6 @@ func (s *Server) Disconnect(connID string) (err error) {
|
|||
if c, ok := s.connections.remove(connID); ok {
|
||||
if !c.disconnected {
|
||||
c.disconnected = true
|
||||
// stop the ping timer
|
||||
c.pinger.Stop()
|
||||
|
||||
// fire the disconnect callbacks, if any
|
||||
c.fireDisconnect()
|
||||
|
|
Loading…
Reference in New Issue
Block a user