在Golang中,xn--golang-2x8i64bc2wcx7f.org/x/net/websocket包实现WebSocket网络编程。代码示例:
服务器:
go
http.HandleFunc("/ws", func(w http.ResponseWriter, r *http.Request) {
conn, err := websocket.Upgrade(w, r, nil, 1024, 1024)
if err != nil {
http.Error(w, "Could not open websocket connection", http.StatusBadRequest)
}
for {
// 读取客户端消息
messageType, p, err := conn.ReadMessage()
if err != nil {
break
}
// 回复客户端消息
if err = conn.WriteMessage(messageType, p); err != nil {
break
}
}
})
http.ListenAndServe(":8000", nil)
服务器通过websocket.Upgrade升级HTTP请求为WebSocket连接,然后通过循环读取和回复客户端消息进行通信。
客户端:
go
conn, _, err := websocket.DefaultDialer.Dial("ws://localhost:8000/ws", nil)
if err != nil {
log.Fatal("dial:", err)
}
for {
// 发送消息给服务器
if err := conn.WriteMessage(websocket.TextMessage, []byte("hello")); err != nil {
log.Fatal("write:", err)
}
// 接收服务器回复
messageType, p, err := conn.ReadMessage()
if err != nil {
break
}
fmt.Println(string(p))
}
客户端通过websocket.Dial建立WebSocket连接,然后发送消息给服务器并接收回复,实现双向通信。