ing
This commit is contained in:
parent
6e4ca0dd5c
commit
1d480c52cd
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user