fix: concurrent write to websocket connection

pull/2866/head
withchao 10 months ago
parent 2b89def10e
commit af2f0209d6

@ -449,6 +449,8 @@ func (c *Client) handlerTextMessage(b []byte) error {
if err := c.conn.SetWriteDeadline(writeWait); err != nil { if err := c.conn.SetWriteDeadline(writeWait); err != nil {
return err return err
} }
c.w.Lock()
defer c.w.Unlock()
return c.conn.WriteMessage(MessageText, msgData) return c.conn.WriteMessage(MessageText, msgData)
default: default:
return fmt.Errorf("not support message type %s", msg.Type) return fmt.Errorf("not support message type %s", msg.Type)

@ -17,7 +17,6 @@ package msggateway
import ( import (
"encoding/json" "encoding/json"
"net/http" "net/http"
"sync"
"time" "time"
"github.com/openimsdk/tools/apiresp" "github.com/openimsdk/tools/apiresp"
@ -56,7 +55,6 @@ type GWebSocket struct {
conn *websocket.Conn conn *websocket.Conn
handshakeTimeout time.Duration handshakeTimeout time.Duration
writeBufferSize int writeBufferSize int
lock sync.Mutex
} }
func newGWebSocket(protocolType int, handshakeTimeout time.Duration, wbs int) *GWebSocket { func newGWebSocket(protocolType int, handshakeTimeout time.Duration, wbs int) *GWebSocket {
@ -86,8 +84,6 @@ func (d *GWebSocket) GenerateLongConn(w http.ResponseWriter, r *http.Request) er
} }
func (d *GWebSocket) WriteMessage(messageType int, message []byte) error { func (d *GWebSocket) WriteMessage(messageType int, message []byte) error {
d.lock.Lock()
defer d.lock.Unlock()
// d.setSendConn(d.conn) // d.setSendConn(d.conn)
return d.conn.WriteMessage(messageType, message) return d.conn.WriteMessage(messageType, message)
} }

Loading…
Cancel
Save