Golang WebSocket 实现:实时接收和响应 JSON 数据
使用 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从连接中读取前端传输的数据,并根据接收到的数据进行处理。在这个示例中,我们只是简单地判断接收到的数据,并根据不同的数据内容分别响应不同的数据。
关键步骤:
- 安装 Gorilla WebSocket 库:
go get github.com/gorilla/websocket - 创建 WebSocket 升级器:
upgrader用于将 HTTP 请求升级为 WebSocket 连接。CheckOrigin函数用于控制跨域访问。 - 处理 WebSocket 连接:
handleWebSocket函数负责处理 WebSocket 连接。它使用upgrader.Upgrade方法将 HTTP 连接升级为 WebSocket 连接。 - 读取和响应消息:
在
handleWebSocket函数中,我们使用conn.ReadMessage方法从连接中读取前端发送的消息,并使用conn.WriteMessage方法向前端发送响应消息。
拓展:
你可以根据实际需求修改switch语句中的逻辑,处理不同的数据,并响应不同的数据给前端。例如,你可以将接收到的 JSON 数据解析成结构体,并根据结构体中的字段进行不同的操作,然后将结果以 JSON 格式发送回前端。
总结:
本文介绍了使用 Golang 和 Gorilla WebSocket 库构建实时通信系统的基本方法。通过代码示例,我们演示了如何使用 WebSocket 实现持续接收和响应前端发送的 JSON 数据。你可以根据实际需求扩展和修改代码,构建更复杂的实时应用。
原文地址: https://www.cveoy.top/t/topic/p1Jw 著作权归作者所有。请勿转载和采集!