fix client & server experimental fix
This commit is contained in:
@@ -11,7 +11,7 @@ import (
|
||||
const (
|
||||
writeWait = 10 * time.Second
|
||||
pongWait = 60 * time.Second
|
||||
pingPeriod = 55 * time.Second
|
||||
pingPeriod = 25 * time.Second
|
||||
)
|
||||
|
||||
type Client struct {
|
||||
@@ -95,7 +95,7 @@ func WritePump(c *Client, h *Hub) {
|
||||
}
|
||||
case <-pingTicker.C:
|
||||
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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -124,16 +124,18 @@ func (wsClient *SafeWebsocketClient) connect() error {
|
||||
}
|
||||
|
||||
conn.SetPingHandler(func(pingData string) error {
|
||||
if err := conn.WriteMessage(websocket.PongMessage, []byte(pingData)); err != nil {
|
||||
if err == websocket.ErrCloseSent {
|
||||
return nil
|
||||
return wsClient.mu.WriteHandler(func() error {
|
||||
if err := conn.WriteMessage(websocket.PongMessage, []byte(pingData)); err != 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 err
|
||||
}
|
||||
return nil
|
||||
return nil
|
||||
})
|
||||
})
|
||||
|
||||
wsClient.mu.WriteHandler(func() error {
|
||||
@@ -142,6 +144,7 @@ func (wsClient *SafeWebsocketClient) connect() error {
|
||||
wsClient.cancel = cancel
|
||||
wsClient.conn = conn
|
||||
wsClient.isConnected = true
|
||||
|
||||
return nil
|
||||
})
|
||||
|
||||
@@ -179,22 +182,26 @@ func (wsClient *SafeWebsocketClient) startReceiveHandler() {
|
||||
log.Println("Reconnect handler stopped")
|
||||
return
|
||||
default:
|
||||
if err := wsClient.mu.ReadHandler(func() error {
|
||||
conn := wsClient.conn
|
||||
// if err := wsClient.mu.ReadHandler(func() error {
|
||||
conn := wsClient.conn
|
||||
|
||||
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 {
|
||||
if conn == nil {
|
||||
wsClient.triggerReconnect()
|
||||
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