This commit is contained in:
苏尹岚
2020-12-03 17:32:13 +08:00
parent 2f68e749c7
commit 609a74e559

View File

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