|
@@ -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 预警管理消息
|