fix client & server experimental fix
This commit is contained in:
@@ -11,7 +11,7 @@ import (
|
|||||||
const (
|
const (
|
||||||
writeWait = 10 * time.Second
|
writeWait = 10 * time.Second
|
||||||
pongWait = 60 * time.Second
|
pongWait = 60 * time.Second
|
||||||
pingPeriod = 55 * time.Second
|
pingPeriod = 25 * time.Second
|
||||||
)
|
)
|
||||||
|
|
||||||
type Client struct {
|
type Client struct {
|
||||||
@@ -95,7 +95,7 @@ func WritePump(c *Client, h *Hub) {
|
|||||||
}
|
}
|
||||||
case <-pingTicker.C:
|
case <-pingTicker.C:
|
||||||
c.Conn.SetWriteDeadline(time.Now().Add(writeWait))
|
c.Conn.SetWriteDeadline(time.Now().Add(writeWait))
|
||||||
if err := c.Conn.WriteMessage(websocket.PingMessage, nil); err != nil {
|
if err := c.Conn.WriteMessage(websocket.PingMessage, []byte{}); err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -124,16 +124,18 @@ func (wsClient *SafeWebsocketClient) connect() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
conn.SetPingHandler(func(pingData string) error {
|
conn.SetPingHandler(func(pingData string) error {
|
||||||
if err := conn.WriteMessage(websocket.PongMessage, []byte(pingData)); err != nil {
|
return wsClient.mu.WriteHandler(func() error {
|
||||||
if err == websocket.ErrCloseSent {
|
if err := conn.WriteMessage(websocket.PongMessage, []byte(pingData)); err != nil {
|
||||||
return nil
|
if err == websocket.ErrCloseSent {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
if netErr, ok := err.(interface{ Timeout() bool }); ok && netErr.Timeout() {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
if netErr, ok := err.(interface{ Timeout() bool }); ok && netErr.Timeout() {
|
return nil
|
||||||
return nil
|
})
|
||||||
}
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
})
|
})
|
||||||
|
|
||||||
wsClient.mu.WriteHandler(func() error {
|
wsClient.mu.WriteHandler(func() error {
|
||||||
@@ -142,6 +144,7 @@ func (wsClient *SafeWebsocketClient) connect() error {
|
|||||||
wsClient.cancel = cancel
|
wsClient.cancel = cancel
|
||||||
wsClient.conn = conn
|
wsClient.conn = conn
|
||||||
wsClient.isConnected = true
|
wsClient.isConnected = true
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -179,22 +182,26 @@ func (wsClient *SafeWebsocketClient) startReceiveHandler() {
|
|||||||
log.Println("Reconnect handler stopped")
|
log.Println("Reconnect handler stopped")
|
||||||
return
|
return
|
||||||
default:
|
default:
|
||||||
if err := wsClient.mu.ReadHandler(func() error {
|
// if err := wsClient.mu.ReadHandler(func() error {
|
||||||
conn := wsClient.conn
|
conn := wsClient.conn
|
||||||
|
|
||||||
if conn == nil {
|
if conn == nil {
|
||||||
return fmt.Errorf("no active connection, waiting for reconnect")
|
|
||||||
}
|
|
||||||
_, message, err := conn.ReadMessage()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
wsClient.dataChannel <- message
|
|
||||||
return nil
|
|
||||||
}); err != nil {
|
|
||||||
wsClient.triggerReconnect()
|
wsClient.triggerReconnect()
|
||||||
return
|
return
|
||||||
|
// return fmt.Errorf("no active connection, waiting for reconnect")
|
||||||
}
|
}
|
||||||
|
_, message, err := conn.ReadMessage()
|
||||||
|
if err != nil {
|
||||||
|
wsClient.triggerReconnect()
|
||||||
|
return
|
||||||
|
// return err
|
||||||
|
}
|
||||||
|
wsClient.dataChannel <- message
|
||||||
|
// return nil
|
||||||
|
// }); err != nil {
|
||||||
|
// wsClient.triggerReconnect()
|
||||||
|
// return
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user