mirror of
https://github.com/kataras/iris.git
synced 2025-01-23 02:31:04 +01:00
Websocket: replaced time.Ticker with sleep for avoid memory leak
Former-commit-id: f17706649faebe3020792e31de877c724be41057
This commit is contained in:
parent
dcde9d05a2
commit
732c9f70ed
|
@ -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