HeWang 6 mesiacov pred
rodič
commit
b90b8b139c

+ 56 - 11
aarch64/pjibot_guide/common/config/c_websocket.go

@@ -55,19 +55,23 @@ func keepAlive() {
 	for {
 		select {
 		case <-ticker.C:
-			response, err := sendRequestAndAwaitResponse(WsConn)
-			if err != nil || response == nil {
-				c_log.GlobalLogger.Error("保持websocket连接活跃,此次请求未获取有效数据。", err)
-				continue
-			}
-			var responseMessage Response
-			err = json.Unmarshal(response, &responseMessage)
+			//response, err := sendRequestAndAwaitResponse(WsConn)
+			//if err != nil || response == nil {
+			//	c_log.GlobalLogger.Error("保持websocket连接活跃,此次请求未获取有效数据。")
+			//	continue
+			//}
+			//var responseMessage Response
+			//err = json.Unmarshal(response, &responseMessage)
+			//if err != nil {
+			//	c_log.GlobalLogger.Error("保持websocket连接活跃,解析websocket响应 - 失败。", err)
+			//	continue
+			//}
+			//c_log.GlobalLogger.Error("responseMessage", responseMessage)
+			flag, err := SendWebsocketHeartbeat(WsConn, 100)
 			if err != nil {
-				c_log.GlobalLogger.Error("保持websocket连接活跃,解析websocket响应 - 失败。", err)
-				continue
+				return
 			}
-			c_log.GlobalLogger.Error("responseMessage", responseMessage)
-			if responseMessage.Status != "OK" {
+			if !flag {
 				WsConn.Close()
 				c_log.GlobalLogger.Info("重试连接websocket...")
 				ConnectWebsocket() // 重新连接
@@ -77,6 +81,47 @@ func keepAlive() {
 	}
 }
 
+func SendWebsocketHeartbeat(conn *websocket.Conn, maxRetries int) (bool, error) {
+
+	request := Request1{
+		Type:      "request",
+		CommandID: "heart",
+		Parameter: nil,
+	}
+
+	// 将请求JSON编码为字节
+	requestJSON, err := json.Marshal(request)
+	if err != nil {
+		return false, fmt.Errorf("marshal request: %w", err)
+	}
+
+	// 发送WebSocket消息
+	err = conn.WriteMessage(websocket.TextMessage, requestJSON)
+	if err != nil {
+		return false, fmt.Errorf("write: %w", err)
+	}
+
+	count := 0
+	for {
+		if count > maxRetries {
+			return false, fmt.Errorf("保持websocket连接活跃,读取websocket消息超过最大重试次数。")
+		}
+		time.Sleep(100 * time.Millisecond)
+		_, message, err := conn.ReadMessage()
+		if err != nil {
+			c_log.GlobalLogger.Error("保持websocket连接活跃,读取websocket消息 - 失败 ", err)
+			return false, err
+		}
+
+		var response Response
+		if err := json.Unmarshal(message, &response); err == nil && response.Type == "response" {
+			fmt.Println("response", response)
+			return true, err
+		}
+		count++
+	}
+}
+
 func sendRequestAndAwaitResponse(ws *websocket.Conn) ([]byte, error) {
 	request := Request1{
 		Type:      "request",