This commit is contained in:
苏尹岚
2020-12-03 18:12:17 +08:00
parent b4b8eaecb0
commit 72c4b6c06a

View File

@@ -32,18 +32,16 @@ type EventController struct {
//连接的客户端,吧每个客户端都放进来 //连接的客户端,吧每个客户端都放进来
var clients = make(map[int]map[string]*websocket.Conn) var clients = make(map[int]map[string]*websocket.Conn)
var heartClients = make(map[string]*websocket.Conn)
//广播频道(通道) //广播频道(通道)
var broadcast = make(chan *model.ImMessageRecord) var broadcast = make(chan *model.ImMessageRecord)
var heartbit = make(chan *Message)
// 配置升级程序(升级为websocket) // 配置升级程序(升级为websocket)
var upgrader = websocket.Upgrader{} var upgrader = websocket.Upgrader{}
// 定义我们的消息对象
type Message struct { type Message struct {
UserID string `json:"userID"` Data interface{} `json:"data"`
Data string `json:"data"`
} }
// @Title 测试websocket // @Title 测试websocket
@@ -75,7 +73,6 @@ func (c *EventController) TestWebsocket() {
if len(messageGroups) == 0 { if len(messageGroups) == 0 {
return return
} }
heartClients[userID] = ws
clientUser[userID] = ws clientUser[userID] = ws
for _, v := range messageGroups { for _, v := range messageGroups {
if len(clients[v.GroupID]) > 0 { if len(clients[v.GroupID]) > 0 {
@@ -104,21 +101,12 @@ func (c *EventController) TestWebsocket() {
//接收客户端的消息 //接收客户端的消息
err := ws.ReadJSON(&s) err := ws.ReadJSON(&s)
if err != nil { if err != nil {
fmt.Println("11111111111111111111111111111111111111111111111111111111111111111111") globals.SugarLogger.Debugf("页面可能断开啦 ws.ReadJSON error: %v", err.Error())
var m *Message for k, _ := range clients {
if err2 := ws.ReadJSON(&m); err2 == nil { delete(clients[k], userID)
fmt.Println("22222222222222222222222222222222222222222222222222222", utils.Format4Output(m, false))
m.UserID = userID
heartbit <- m
} else {
fmt.Println("22222222222222222222222222222222222222222222222222222", err)
globals.SugarLogger.Debugf("页面可能断开啦 ws.ReadJSON error: %v", err.Error())
for k, _ := range clients {
delete(clients[k], userID)
}
delete(heartClients, userID)
break //结束循环
} }
// delete(clients, ws) //删除map中的客户端
break //结束循环
} else { } else {
//接受消息 业务逻辑 //接受消息 业务逻辑
broadcast <- s broadcast <- s
@@ -157,35 +145,23 @@ func init() {
//广播推送消息 //广播推送消息
func handleMessages() { func handleMessages() {
for { for {
select {
//读取通道中的消息 //读取通道中的消息
case msg := <-broadcast: msg := <-broadcast
globals.SugarLogger.Debugf("clients len %v", len(clients)) globals.SugarLogger.Debugf("clients len %v", len(clients))
//循环map客户端 //循环map客户端
for userID, client := range clients[msg.GroupID] { for userID, client := range clients[msg.GroupID] {
//把通道中的消息发送给客户端 //把通道中的消息发送给客户端
user, err := dao.GetUser(dao.GetDB(), msg.UserID) user, err := dao.GetUser(dao.GetDB(), msg.UserID)
if err == nil { if err == nil {
msg.UserInfo = user msg.UserInfo = user
}
globals.SugarLogger.Debugf("msg %v", utils.Format4Output(msg, false))
err = client.WriteJSON(msg)
if err != nil {
globals.SugarLogger.Debugf("client.WriteJSON error: %v", err)
client.Close() //关闭
delete(clients[msg.GroupID], userID)
// delete(clients, client) //删除map中的客户端
}
} }
case h := <-heartbit: globals.SugarLogger.Debugf("msg %v", utils.Format4Output(msg, false))
fmt.Println("33333333333333333333333333333333333333333333333333", utils.Format4Output(h, false)) err = client.WriteJSON(msg)
globals.SugarLogger.Debugf("h %v", utils.Format4Output(h, false)) if err != nil {
if err := heartClients[h.UserID].WriteJSON(&Message{ globals.SugarLogger.Debugf("client.WriteJSON error: %v", err)
Data: "pang", client.Close() //关闭
}); err != nil { delete(clients[msg.GroupID], userID)
globals.SugarLogger.Debugf("userheart client.WriteJSON error: %v", err) // delete(clients, client) //删除map中的客户端
heartClients[h.UserID].Close()
delete(heartClients, h.UserID)
} }
} }
} }