xyxie 3 settimane fa
parent
commit
18971b0aad

+ 17 - 12
controllers/edb_monitor/edb_monitor_message.go

@@ -34,7 +34,7 @@ var upgrader = websocket.Upgrader{
 // @Description 预警管理消息
 // @Param   request body request.EdbMonitorSaveRequest  true  "每页数据条数"
 // @Success 200 {object} models.EnglishReportEmailPageListResp
-// @router /message/connect [get]
+// @router /message/connectV1 [get]
 func (m *EdbMonitorMessageController) Connect() {
 	br := new(models.BaseResponse).Init()
 	defer func() {
@@ -150,38 +150,40 @@ func (m *EdbMonitorMessageController) Connect() {
 // @Description 预警管理消息
 // @Param   request body request.EdbMonitorSaveRequest  true  "每页数据条数"
 // @Success 200 {object} models.EnglishReportEmailPageListResp
-// @router /message/connectV2 [get]
+// @router /message/connect [get]
 func (m *EdbMonitorMessageController) ConnectV2() {
-	br := new(models.BaseResponse).Init()
-	defer func() {
-		m.Data["json"] = br
-		m.ServeJSON()
-	}()
+	// 不要在WebSocket连接中使用defer m.ServeJSON(),因为连接已被劫持
 	sysUser := m.SysUser
 	if sysUser == nil {
+		// 在升级连接前处理错误
+		br := new(models.BaseResponse).Init()
 		br.Msg = "请登录"
 		br.ErrMsg = "请登录,SysUser Is Empty"
 		br.Ret = 408
+		m.Data["json"] = br
+		m.ServeJSON()
 		return
 	}
+	
 	oldConn := global.AdminWebSocketConnMap[sysUser.AdminId]
 	if oldConn != nil {
 		oldConn.Close()
 	}
+	
     // 建立长连接
-	// 开启心跳检测
-	// 发送消息
-	// 关闭连接
 	var conn *websocket.Conn
 	var err error
 	conn, err = upgrader.Upgrade(m.Ctx.ResponseWriter, m.Ctx.Request, nil)
 	if err != nil {
+		// 在升级连接失败时处理错误
+		br := new(models.BaseResponse).Init()
 		br.Msg = "连接失败"
 		br.ErrMsg = "连接失败,err:" + err.Error()
+		m.Data["json"] = br
+		m.ServeJSON()
 		return
 	}
-	defer conn.Close()
-
+	
 	// 为新连接创建唯一ID
 	connID := fmt.Sprintf("%s-%d", conn.RemoteAddr().String(), time.Now().UnixNano())
 			
@@ -195,6 +197,9 @@ func (m *EdbMonitorMessageController) ConnectV2() {
 	
 	// 启动连接的协程
 	connection.Start()
+	
+	// 注意:不要在这里使用defer conn.Close(),因为连接会在WebSocketConn.Close()中关闭
+	// 连接将保持开放状态,直到客户端断开连接或通过其他方法关闭
 }
 // Close
 // @Title 预警管理消息

+ 3 - 3
routers/commentsRouter.go

@@ -7902,7 +7902,7 @@ func init() {
 
     beego.GlobalControllerRouter["eta/eta_api/controllers/edb_monitor:EdbMonitorMessageController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/edb_monitor:EdbMonitorMessageController"],
         beego.ControllerComments{
-            Method: "Connect",
+            Method: "ConnectV2",
             Router: `/message/connect`,
             AllowHTTPMethods: []string{"get"},
             MethodParams: param.Make(),
@@ -7911,8 +7911,8 @@ func init() {
 
     beego.GlobalControllerRouter["eta/eta_api/controllers/edb_monitor:EdbMonitorMessageController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/edb_monitor:EdbMonitorMessageController"],
         beego.ControllerComments{
-            Method: "ConnectV2",
-            Router: `/message/connectV2`,
+            Method: "Connect",
+            Router: `/message/connectV1`,
             AllowHTTPMethods: []string{"get"},
             MethodParams: param.Make(),
             Filters: nil,

+ 2 - 1
services/edb_monitor/edb_monitor_message.go

@@ -256,9 +256,10 @@ func AutoCheckMonitorMessageListByAdminId(adminId int) (err error){
 	for k, msg := range messageList {
 		if k == 0 {
 			triggerTime := utils.TimeTransferString(utils.FormatDateTime, msg.MonitorTriggerTime)
-			err := SendMessages(msg.AdminId, msg.EdbInfoId, msg.EdbInfoType, msg.EdbClassifyId, msg.EdbUniqueCode, msg.Message, triggerTime)
+			err = SendMessages(msg.AdminId, msg.EdbInfoId, msg.EdbInfoType, msg.EdbClassifyId, msg.EdbUniqueCode, msg.Message, triggerTime)
 			if err != nil {
 				utils.FileLog.Error("指标预警信息发送失败,err:%s, adminId:%d", err.Error(), msg.AdminId)
+				return
 			} 
 		}
 		readList = append(readList, msg.EdbMonitorMessageId)