Golang中如何使用WebSocket进行网络编程?代码举例讲解

在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连接,然后发送消息给服务器并接收回复,实现双向通信。