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 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 {
UserID string `json:"userID"`
Data string `json:"data"`
Data interface{} `json:"data"`
}
// @Title 测试websocket
@@ -75,7 +73,6 @@ 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 {
@@ -104,21 +101,12 @@ func (c *EventController) TestWebsocket() {
//接收客户端的消息
err := ws.ReadJSON(&s)
if err != nil {
fmt.Println("11111111111111111111111111111111111111111111111111111111111111111111")
var m *Message
if err2 := ws.ReadJSON(&m); err2 == nil {
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 //结束循环
globals.SugarLogger.Debugf("页面可能断开啦 ws.ReadJSON error: %v", err.Error())
for k, _ := range clients {
delete(clients[k], userID)
}
// delete(clients, ws) //删除map中的客户端
break //结束循环
} else {
//接受消息 业务逻辑
broadcast <- s
@@ -157,35 +145,23 @@ func init() {
//广播推送消息
func handleMessages() {
for {
select {
//读取通道中的消息
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中的客户端
}
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 h := <-heartbit:
fmt.Println("33333333333333333333333333333333333333333333333333", utils.Format4Output(h, false))
globals.SugarLogger.Debugf("h %v", utils.Format4Output(h, false))
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)
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中的客户端
}
}
}