解决groutine泄露

pull/23/head
陶士涵 4 years ago
parent ebf5495a73
commit 2e78405285

@ -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)

@ -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)

@ -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)

@ -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()
}
}
}

Loading…
Cancel
Save