From 2e78405285bdd69d6ad5d2a3c708ec6a124bc0e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=B6=E5=A3=AB=E6=B6=B5?= <630892807@qq.com> Date: Thu, 19 Nov 2020 21:28:18 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E5=86=B3groutine=E6=B3=84=E9=9C=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- router/api.go | 1 + ws/user.go | 2 +- ws/visitor.go | 2 +- ws/ws.go | 31 ++++++++++++++++++++++++++++++- 4 files changed, 33 insertions(+), 3 deletions(-) diff --git a/router/api.go b/router/api.go index d85d13a..d7690e0 100644 --- a/router/api.go +++ b/router/api.go @@ -28,6 +28,7 @@ func InitApiRouter(engine *gin.Engine) { engine.GET("/chat_server", middleware.Ipblack, controller.NewChatServer) engine.GET("/ws_kefu", middleware.JwtApiMiddleware, ws.NewKefuServer) engine.GET("/ws_visitor", ws.NewVisitorServer) + go ws.WsServerBackend() engine.GET("/messages", controller.GetVisitorMessage) engine.GET("/message_notice", controller.SendVisitorNotice) diff --git a/ws/user.go b/ws/user.go index 9cb3fb5..2129764 100644 --- a/ws/user.go +++ b/ws/user.go @@ -19,7 +19,7 @@ func NewKefuServer(c *gin.Context) { return } - go kefuServerBackend() + //go kefuServerBackend() conn, err := upgrader.Upgrade(c.Writer, c.Request, nil) if err != nil { log.Print("upgrade:", err) diff --git a/ws/visitor.go b/ws/visitor.go index 1d333bb..23d2e9a 100644 --- a/ws/visitor.go +++ b/ws/visitor.go @@ -8,7 +8,7 @@ import ( ) func NewVisitorServer(c *gin.Context) { - go kefuServerBackend() + //go kefuServerBackend() conn, err := upgrader.Upgrade(c.Writer, c.Request, nil) if err != nil { log.Print("upgrade:", err) diff --git a/ws/ws.go b/ws/ws.go index 9638bde..0e66459 100644 --- a/ws/ws.go +++ b/ws/ws.go @@ -1,6 +1,7 @@ package ws import ( + "encoding/json" "fmt" "github.com/gin-gonic/gin" "github.com/gorilla/websocket" @@ -48,7 +49,7 @@ type ClientMessage struct { var ClientList = make(map[string]*User) var KefuList = make(map[string][]*User) -var message = make(chan *Message) +var message = make(chan *Message, 10) var upgrader = websocket.Upgrader{} var Mux sync.RWMutex @@ -94,3 +95,31 @@ func UpdateVisitorStatusCron() { time.Sleep(60 * time.Second) } } + +//后端广播发送消息 +func WsServerBackend() { + for { + message := <-message + var typeMsg TypeMessage + json.Unmarshal(message.content, &typeMsg) + conn := message.conn + if typeMsg.Type == nil || typeMsg.Data == nil { + continue + } + msgType := typeMsg.Type.(string) + log.Println("客户端:", string(message.content)) + + switch msgType { + //心跳 + case "ping": + msg := TypeMessage{ + Type: "pong", + } + str, _ := json.Marshal(msg) + Mux.Lock() + conn.WriteMessage(websocket.TextMessage, str) + Mux.Unlock() + } + + } +}