使用 Golang 实现 WebSocket:实时接收和响应 JSON 数据

本文将介绍如何使用 Golang 和 Gorilla WebSocket 库构建实时通信系统,并演示如何持续接收前端发送的 JSON 数据并根据内容进行不同的响应。

代码示例:

package main

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

	"github.com/gorilla/websocket"
)

var upgrader = websocket.Upgrader{
	CheckOrigin: func(r *http.Request) bool {
		return true
	},
}

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

	for {
		// 读取前端传输的数据
		_, msg, err := conn.ReadMessage()
		if err != nil {
			log.Println('Failed to read message:', err)
			break
		}
		fmt.Println('Received:', string(msg))

		// 根据接收到的数据进行处理
		// 这里只是简单示例,可以根据实际需求进行处理
		switch string(msg) {
		case 'hello':
			response := []byte('Hello, client!')
			err = conn.WriteMessage(websocket.TextMessage, response)
			if err != nil {
				log.Println('Failed to write message:', err)
				break
			}
		case 'time':
			response := []byte('Current time is 2022-01-01 12:00:00')
			err = conn.WriteMessage(websocket.TextMessage, response)
			if err != nil {
				log.Println('Failed to write message:', err)
				break
			}
		default:
			response := []byte('Invalid command')
			err = conn.WriteMessage(websocket.TextMessage, response)
			if err != nil {
				log.Println('Failed to write message:', err)
				break
			}
		}
	}
}

func main() {
	http.HandleFunc('/ws', handleWebSocket)
	log.Println('Server started on http://localhost:8080')
	err := http.ListenAndServe(':8080', nil)
	if err != nil {
		log.Fatal('Failed to start server:', err)
	}
}

这段代码创建了一个 WebSocket 服务器,通过/ws路径来处理 WebSocket 连接。在handleWebSocket函数中,我们使用conn.ReadMessage从连接中读取前端传输的数据,并根据接收到的数据进行处理。在这个示例中,我们只是简单地判断接收到的数据,并根据不同的数据内容分别响应不同的数据。

关键步骤:

  1. 安装 Gorilla WebSocket 库:
    	go get github.com/gorilla/websocket
    
  2. 创建 WebSocket 升级器: upgrader用于将 HTTP 请求升级为 WebSocket 连接。CheckOrigin函数用于控制跨域访问。
  3. 处理 WebSocket 连接: handleWebSocket函数负责处理 WebSocket 连接。它使用upgrader.Upgrade方法将 HTTP 连接升级为 WebSocket 连接。
  4. 读取和响应消息:handleWebSocket函数中,我们使用conn.ReadMessage方法从连接中读取前端发送的消息,并使用conn.WriteMessage方法向前端发送响应消息。

拓展:

你可以根据实际需求修改switch语句中的逻辑,处理不同的数据,并响应不同的数据给前端。例如,你可以将接收到的 JSON 数据解析成结构体,并根据结构体中的字段进行不同的操作,然后将结果以 JSON 格式发送回前端。

总结:

本文介绍了使用 Golang 和 Gorilla WebSocket 库构建实时通信系统的基本方法。通过代码示例,我们演示了如何使用 WebSocket 实现持续接收和响应前端发送的 JSON 数据。你可以根据实际需求扩展和修改代码,构建更复杂的实时应用。

Golang WebSocket 实现:实时接收和响应 JSON 数据

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

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