golang WebSocket与JSON的结合:实现数据传输和解析
在现代的Web开发中,实时数据传输变得越来越重要。WebSocket是一种用于实现双向通信的协议,与传统的HTTP请求-响应模型不同,WebSocket允许服务器向客户端主动推送数据。而JSON(JavaScript Object Notation)是一种用于数据交换的轻量级格式,它简洁易读,并且在不同编程语言之间易于解析。
本文将介绍如何使用Golang结合WebSocket和JSON来实现数据传输和解析。我们将使用Golang的内置包net/http
和github.com/gorilla/websocket
来处理WebSocket连接,并使用encoding/json
来解析和生成JSON数据。
首先,我们需要安装gorilla/websocket
包。你可以使用以下命令来安装:
go get github.com/gorilla/websocket
接下来,我们可以开始编写代码了。
package main import ( "encoding/json" "fmt" "log" "net/http" "github.com/gorilla/websocket" ) type Message struct { Content string `json:"content"` } var upgrader = websocket.Upgrader{ ReadBufferSize: 1024, WriteBufferSize: 1024, } func echoHandler(w http.ResponseWriter, r *http.Request) { conn, err := upgrader.Upgrade(w, r, nil) if err != nil { log.Println(err) return } defer conn.Close() for { // 读取客户端发送的消息 _, message, err := conn.ReadMessage() if err != nil { log.Println(err) break } // 解析JSON数据 var msg Message err = json.Unmarshal(message, &msg) if err != nil { log.Println(err) break } // 输出收到的消息 fmt.Println("收到消息:", msg.Content) // 发送响应消息 response := Message{ Content: "你发送的消息是:" + msg.Content, } // 将响应转换为JSON格式 jsonResponse, err := json.Marshal(response) if err != nil { log.Println(err) break } // 发送JSON响应 err = conn.WriteMessage(websocket.TextMessage, jsonResponse) if err != nil { log.Println(err) break } } } func main() { http.HandleFunc("/ws", echoHandler) log.Fatal(http.ListenAndServe(":8080", nil)) }
上述代码包含了一个WebSocket处理函数echoHandler
,它接收客户端的WebSocket连接并处理消息的收发。在函数内部,我们首先读取客户端发送的消息,并解析为Message
结构体。然后,我们输出收到的消息,生成响应消息,并将响应转换为JSON格式。最后,我们使用conn.WriteMessage
将JSON响应发送给客户端。
在主函数中,我们将WebSocket处理函数echoHandler
注册到/ws
路由上,并监听本地的8080端口。
编译并运行程序后,在浏览器中打开WebSocket连接,可以通过JavaScript的WebSocket对象发送和接收JSON数据。以下是一个简单的JavaScript代码示例:
var socket = new WebSocket("ws://localhost:8080/ws"); socket.onopen = function () { console.log('连接已打开'); var message = { content: 'Hello Server!' }; socket.send(JSON.stringify(message)); }; socket.onmessage = function (event) { console.log('收到服务器的响应:', JSON.parse(event.data)); socket.close(); }; socket.onclose = function () { console.log('连接已关闭'); };
在上述JavaScript代码中,我们创建了一个WebSocket连接,并在连接打开时发送一个包含消息内容的JSON数据。当收到服务器的响应时,我们解析并打印响应消息,并关闭WebSocket连接。
原文来自:www.php.cn
暂无评论内容