使用 Golang 实现 WebSocket,不断接受不同时刻前端传输的不同 JSON 数据,如 {"input":"text","gender":1}、{"start_flag":true}、{"end_flag":true},且响应不同的数据内容:下面是一个使用 Golang 实现 WebSocket 的示例代码:

package main

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

	"github.com/gorilla/websocket"
)

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

func websocketHandler(w http.ResponseWriter, r *http.Request) {
	conn, err := upgrader.Upgrade(w, r, nil)
	if err != nil {
		log.Println("Failed to upgrade connection:", err)
		return
	}

	for {
		// 读取前端发送的消息
		_, message, err := conn.ReadMessage()
		if err != nil {
			log.Println("Failed to read message:", err)
			break
		}

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

		// 处理不同的消息类型
		if input, ok := jsonData["input"].(string); ok {
			// 处理输入文本消息
			fmt.Println("Received input:", input)
			// TODO: 做相应的处理

		} else if startFlag, ok := jsonData["start_flag"].(bool); ok && startFlag {
			// 处理开始标志消息
			fmt.Println("Received start flag")
			// TODO: 做相应的处理

		} else if endFlag, ok := jsonData["end_flag"].(bool); ok && endFlag {
			// 处理结束标志消息
			fmt.Println("Received end flag")
			// TODO: 做相应的处理

		} else {
			log.Println("Unknown message:", jsonData)
		}
	}
}

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

在上面的代码中,我们使用 Gorilla WebSocket 库来实现 WebSocket 的功能。首先,我们定义了一个 upgrader 来升级 HTTP 连接为 WebSocket 连接。然后,在 websocketHandler 函数中,我们通过调用 upgrader.Upgrade 方法升级连接,并得到一个 websocket.Conn 对象。接下来,我们使用一个无限循环来不断读取前端发送的消息,并根据消息的不同类型进行处理。

在处理消息时,我们首先使用 json.Unmarshal 方法将消息解析为一个 map[string]interface{} 类型的对象。然后,我们根据消息中的键值对来判断消息的类型,并进行相应的处理。在示例代码中,我们假设输入消息中有一个键为 input 的字符串,开始标志消息中有一个键为 start_flag 的布尔值,结束标志消息中有一个键为 end_flag 的布尔值。你可以根据实际需求修改消息的类型和键名,并在相应的处理分支中添加你的业务逻辑。

最后,在 main 函数中,我们使用 http.HandleFunc 方法将 websocketHandler 函数注册为处理 /websocket 路径的 HTTP 请求的处理函数,并通过调用 http.ListenAndServe 方法来启动一个 HTTP 服务器。你可以根据需要修改监听的端口号。

Golang WebSocket 实现: 接收动态 JSON 数据并响应

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

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