以下是使用 Golang 实现 WebSocket 服务器的示例代码,演示如何实时接收前端发送的不同 JSON 数据(例如:{“input”:"text",“gender”:1}、{“start_flag”:true}、{“end_flag”:true}),并根据数据类型做出相应的响应。

package main

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

	"github.com/gorilla/websocket"
)

var upgrader = websocket.Upgrader{
	ReadBufferSize:  1024,
	WriteBufferSize: 1024,
}

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

func wsHandler(w http.ResponseWriter, r *http.Request) {
	conn, err := upgrader.Upgrade(w, r, nil)
	if err != nil {
		log.Println(err)
		return
	}
	defer conn.Close()

	for {
		// 读取消息
		_, msg, err := conn.ReadMessage()
		if err != nil {
			log.Println(err)
			break
		}
		fmt.Printf("Received: %s\n", msg)

		// 处理不同的消息类型
		handleMessage(conn, msg)
	}
}

func handleMessage(conn *websocket.Conn, msg []byte) {
	// 解析 JSON 数据
	data := make(map[string]interface{})
	err := json.Unmarshal(msg, &data)
	if err != nil {
		log.Println(err)
		return
	}

	// 根据不同的消息类型进行处理
	if input, ok := data["input"].(string); ok {
		// 处理输入文本消息
		// TODO: 实现对输入文本的处理逻辑
		response := []byte("Text input received")
		conn.WriteMessage(websocket.TextMessage, response)
	} else if startFlag, ok := data["start_flag"].(bool); ok {
		// 处理开始标志消息
		// TODO: 实现对开始标志的处理逻辑
		response := []byte("Start flag received")
		conn.WriteMessage(websocket.TextMessage, response)
	} else if endFlag, ok := data["end_flag"].(bool); ok {
		// 处理结束标志消息
		// TODO: 实现对结束标志的处理逻辑
		response := []byte("End flag received")
		conn.WriteMessage(websocket.TextMessage, response)
	} else {
		// 未知消息类型
		response := []byte("Unknown message type")
		conn.WriteMessage(websocket.TextMessage, response)
	}
}

在上述代码中,我们使用了 gorilla/websocket 库来实现 WebSocket 功能。首先,在 main 函数中,我们创建了一个 HTTP 路由,将 /ws 路径映射到 wsHandler 函数上。在 wsHandler 函数中,我们使用 Upgrader 将 HTTP 连接升级为 WebSocket 连接,并在一个无限循环中不断读取消息。然后,我们使用 handleMessage 函数来处理不同的消息类型,并根据不同的消息类型进行响应。

handleMessage 函数中,我们首先解析收到的 JSON 数据,然后根据不同的字段进行处理。我们使用类型断言来确定字段的类型,并根据不同的消息类型进行相应的处理逻辑。最后,我们使用 WriteMessage 函数将响应数据发送回前端。

请注意,上述代码中的处理逻辑只是示例,你需要根据实际需求来实现真正的处理逻辑。

Golang WebSocket 实时接收前端 JSON 数据并响应:示例与解析

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

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