Fix: websocket timeouts when many traffic etries sent (#1038)

This commit is contained in:
Igor Gov
2022-04-24 11:23:59 +03:00
committed by GitHub
parent b5c5a8934b
commit 2de57a6630

View File

@@ -123,22 +123,23 @@ func SendToSocket(socketId int, message []byte) error {
return fmt.Errorf("socket %v is disconnected", socketId)
}
var sent = false
time.AfterFunc(time.Second*5, func() {
if !sent {
logger.Log.Error("socket timed out")
socketCleanup(socketId, socketObj)
}
})
socketObj.lock.Lock() // gorilla socket panics from concurrent writes to a single socket
err := socketObj.connection.WriteMessage(1, message)
socketObj.lock.Unlock()
sent = true
defer socketObj.lock.Unlock()
if err != nil {
return fmt.Errorf("failed to write message to socket %v, err: %w", socketId, err)
if connectedWebsockets[socketId] == nil {
return fmt.Errorf("socket %v is disconnected", socketId)
}
if err := socketObj.connection.SetWriteDeadline(time.Now().Add(time.Second * 10)); err != nil {
socketCleanup(socketId, socketObj)
return fmt.Errorf("error setting timeout to socket %v, err: %v", socketId, err)
}
if err := socketObj.connection.WriteMessage(websocket.TextMessage, message); err != nil {
socketCleanup(socketId, socketObj)
return fmt.Errorf("failed to write message to socket %v, err: %v", socketId, err)
}
return nil
}