Parcourir la source

fix: websocket heart message

HeWang il y a 6 mois
Parent
commit
7b99429e08
1 fichiers modifiés avec 32 ajouts et 4 suppressions
  1. 32 4
      aarch64/pjibot_guide/common/config/c_websocket.go

+ 32 - 4
aarch64/pjibot_guide/common/config/c_websocket.go

@@ -2,6 +2,7 @@ package config
 
 import (
 	"cicv-data-closedloop/common/config/c_log"
+	"encoding/json"
 	"fmt"
 	"github.com/gorilla/websocket"
 	"net/url"
@@ -43,16 +44,44 @@ type StatusMessage struct {
 func keepAlive() {
 	ticker := time.NewTicker(30 * time.Second)
 	defer ticker.Stop()
+	request := Request{
+		Type:      "request",
+		UUID:      "",
+		CommandID: "heart",
+		Parameter: nil,
+	}
+
+	requestJSON, err := json.Marshal(request)
+	if err != nil {
+		c_log.GlobalLogger.Error("保持websocket连接活跃,解析requestJSON - 失败。", err)
+	}
 
 	for {
 		select {
 		case <-ticker.C:
-			if err := WsConn.WriteMessage(websocket.PingMessage, []byte{}); err != nil {
-				c_log.GlobalLogger.Error("保持websocket连接活跃,发送ping - 失败。", err)
+			err := WsConn.WriteMessage(websocket.TextMessage, requestJSON)
+			if err != nil {
+				c_log.GlobalLogger.Error("保持websocket连接活跃,发送心跳请求 - 失败。", err)
+				continue
+			}
+			_, msg, err := WsConn.ReadMessage()
+			if err != nil {
+				c_log.GlobalLogger.Error("保持websocket连接活跃,获取心跳响应 - 失败。", err)
+				continue
+			}
+			c_log.GlobalLogger.Error("保持websocket连接活跃,发送心跳请求 - 成功。", err)
+			// 将响应字节解码为JSON
+			var responseMessage Response
+			err = json.Unmarshal(msg, &responseMessage)
+			if err != nil {
+				c_log.GlobalLogger.Error("保持websocket连接活跃,解析心跳响应为json - 失败。", err)
+				continue
+			}
+			if responseMessage.Status != "OK" {
 				WsConn.Close()
 				c_log.GlobalLogger.Info("重试连接websocket...")
 				InitWebsocketConfig() // 重新连接
-				return
+				continue
 			}
 		}
 	}
@@ -103,5 +132,4 @@ func InitWebsocketConfig() {
 		reconnectionInProgress = false
 		break
 	}
-
 }