From 1d480c52cdf8036902603a6c9fb15067f0299a9c Mon Sep 17 00:00:00 2001 From: crusader Date: Wed, 12 Jul 2017 21:57:03 +0900 Subject: [PATCH] ing --- websocket/client.go | 28 ++++++---------------------- 1 file changed, 6 insertions(+), 22 deletions(-) diff --git a/websocket/client.go b/websocket/client.go index 867ee28..d6861bf 100644 --- a/websocket/client.go +++ b/websocket/client.go @@ -3,7 +3,6 @@ package websocket import ( "fmt" "log" - "net" "net/http" "sync" "time" @@ -118,11 +117,10 @@ func (c *client) On(event string, cb OnFunc) { } func (c *client) initialize() error { - c.startPingPong() + c.startPing() } func (c *client) destroy() error { - c.stopPingPong() c.status = DISCONNECTED for i := range c.onDisconnectListeners { @@ -132,39 +130,25 @@ func (c *client) destroy() error { return c.conn.Close() } -func (c *client) startPingPong() { - c.conn.SetPingHandler(func(message string) error { - err := c.conn.WriteControl(gWebsocket.PongMessage, []byte("pong"), time.Now().Add(c.server.options.PongTimeout)) - if err == gWebsocket.ErrCloseSent { - return nil - } else if e, ok := err.(net.Error); ok && e.Temporary() { - return nil - } - return err - }) - +func (c *client) startPing() { c.pingTicker = time.NewTicker(c.server.options.PingPeriod) go func() { + defer c.pingTicker.Stop() for { <-c.pingTicker.C - err := c.conn.WriteControl(gWebsocket.PingMessage, []byte("ping"), time.Now().Add(c.server.options.PingTimeout)) - if err == gWebsocket.ErrCloseSent { - } else if e, ok := err.(net.Error); ok && e.Temporary() { + if err := c.conn.WriteControl(gWebsocket.PingMessage, []byte{}, time.Now().Add(c.server.options.PingTimeout)); err != nil { + log.Println("ping:", err) } } }() } -func (c *client) stopPingPong() { - c.pingTicker.Stop() -} - func (c *client) startReading() { hasReadTimeout := c.server.options.ReadTimeout > 0 c.conn.SetReadLimit(c.server.options.MaxMessageSize) c.conn.SetPongHandler(func(message string) error { if hasReadTimeout { - c.conn.SetReadDeadline(time.Now().Add(c.server.options.ReadTimeout)) + c.conn.SetReadDeadline(time.Now().Add(c.server.options.PongTimeout)) } return nil