修复锁问题

pull/23/head
630892807@qq.com 3 years ago
parent c3d4e6e1f9
commit 77ba60717a

@ -91,8 +91,8 @@ func OneKefuMessage(toId string, str []byte) {
if mKefuConns != nil && ok { if mKefuConns != nil && ok {
for _, kefu := range mKefuConns { for _, kefu := range mKefuConns {
log.Println("OneKefuMessage lock") log.Println("OneKefuMessage lock")
Mux.Lock() kefu.Mux.Lock()
defer Mux.Unlock() defer kefu.Mux.Unlock()
log.Println("OneKefuMessage unlock") log.Println("OneKefuMessage unlock")
kefu.Conn.WriteMessage(websocket.TextMessage, str) kefu.Conn.WriteMessage(websocket.TextMessage, str)
} }
@ -113,6 +113,8 @@ func SendPingToKefuClient() {
if kefuConn == nil { if kefuConn == nil {
continue continue
} }
kefuConn.Mux.Lock()
defer kefuConn.Mux.Unlock()
err := kefuConn.Conn.WriteMessage(websocket.TextMessage, str) err := kefuConn.Conn.WriteMessage(websocket.TextMessage, str)
if err == nil { if err == nil {
newKefuConns = append(newKefuConns, kefuConn) newKefuConns = append(newKefuConns, kefuConn)

@ -21,12 +21,14 @@ type User struct {
Avator string Avator string
To_id string To_id string
Role_id string Role_id string
Mux sync.Mutex
} }
type Message struct { type Message struct {
conn *websocket.Conn conn *websocket.Conn
context *gin.Context context *gin.Context
content []byte content []byte
messageType int messageType int
Mux sync.Mutex
} }
type TypeMessage struct { type TypeMessage struct {
Type interface{} `json:"type"` Type interface{} `json:"type"`
@ -126,9 +128,9 @@ func WsServerBackend() {
Type: "pong", Type: "pong",
} }
str, _ := json.Marshal(msg) str, _ := json.Marshal(msg)
Mux.Lock() message.Mux.Lock()
defer message.Mux.Unlock()
conn.WriteMessage(websocket.TextMessage, str) conn.WriteMessage(websocket.TextMessage, str)
Mux.Unlock()
case "inputing": case "inputing":
to := typeMsg.Data.(map[string]interface{})["to"].(string) to := typeMsg.Data.(map[string]interface{})["to"].(string)
OneKefuMessage(to, message.content) OneKefuMessage(to, message.content)

Loading…
Cancel
Save