package main

import ( "fmt" "log" "net/http"

"github.com/gorilla/websocket"

)

var upgrader = websocket.Upgrader{ CheckOrigin: func(r *http.Request) bool { // 允许所有来源的请求升级为WebSocket连接 return true }, }

func main() { http.HandleFunc("/ws", handleWebSocket) log.Fatal(http.ListenAndServe(":8080", nil)) }

func handleWebSocket(w http.ResponseWriter, r *http.Request) { // 将HTTP连接升级为WebSocket连接 conn, err := upgrader.Upgrade(w, r, nil) if err != nil { log.Println("Failed to upgrade connection:", err) return } defer conn.Close()

// 处理WebSocket消息
for {
	// 读取WebSocket消息
	_, msg, err := conn.ReadMessage()
	if err != nil {
		log.Println("Failed to read message:", err)
		break
	}

	// 解析JSON数据
	data := make(map[string]interface{})
	err = json.Unmarshal(msg, &data)
	if err != nil {
		log.Println("Failed to parse JSON:", err)
		continue
	}

	// 根据不同的数据类型进行处理
	if input, ok := data["input"].(string); ok {
		// 处理input字段
		// TODO: 根据input字段的值进行相应的处理
		response := map[string]interface{} {
			"status": "success",
			"input":  input,
		}
		err = conn.WriteJSON(response)
		if err != nil {
			log.Println("Failed to send response:", err)
			break
		}
	} else if startFlag, ok := data["start_flag"].(bool); ok {
		// 处理start_flag字段
		// TODO: 根据start_flag字段的值进行相应的处理
		response := map[string]interface{} {
			"status":     "success",
			"start_flag": startFlag,
		}
		err = conn.WriteJSON(response)
		if err != nil {
			log.Println("Failed to send response:", err)
			break
		}
	} else if endFlag, ok := data["end_flag"].(bool); ok {
		// 处理end_flag字段
		// TODO: 根据end_flag字段的值进行相应的处理
		response := map[string]interface{} {
			"status":   "success",
			"end_flag": endFlag,
		}
		err = conn.WriteJSON(response)
		if err != nil {
			log.Println("Failed to send response:", err)
			break
		}
	} else {
		// 处理未知的数据类型
		response := map[string]interface{} {
			"status":  "error",
			"message": "Unknown data type",
		}
		err = conn.WriteJSON(response)
		if err != nil {
			log.Println("Failed to send response:", err)
			break
		}
	}
}

}

Golang WebSocket 实战:接收 JSON 数据,响应处理,错误处理和 Token 校验

原文地址: https://www.cveoy.top/t/topic/p1TD 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录