Golang中如何实现Websocket协议?代码举例讲解

在Golang中,可以使用net/http和gorilla/websocket包实现Websocket协议。代码示例:

go
// 实现websocket服务器
handler := func(w http.ResponseWriter, r *http.Request) {
    upgrader := websocket.Upgrader{}
    conn, err := upgrader.Upgrade(w, r, nil)
    if err != nil {
        log.Println(err)
        return
    }
    for {
        // 读取客户端消息
        msgType, msg, err := conn.ReadMessage()
        if err != nil {
            log.Println(err)
            return
        }

        // 将消息回显给客户端
        if err = conn.WriteMessage(msgType, msg); err != nil { 
            return
        }
    }
}

func main() {
    http.HandleFunc("/ws", handler)
    log.Fatal(http.ListenAndServe(":8000", nil))
}

该示例使用net/http启动HTTP服务器,并注册/ws路径使用handler处理Websocket请求,handler通过websocket.Upgrader升级为Websocket连接,并在连接上回显客户端发送的消息。

go
// 实现websocket客户端
conn, _, err := websocket.DefaultDialer.Dial("ws://localhost:8000/ws", nil)
if err != nil {
    log.Fatal(err)
}

for {
    // 发送消息给服务器
    if err := conn.WriteMessage(websocket.TextMessage, []byte("hello")); err != nil {
        log.Fatal(err)
    }

    // 读取服务器消息
    msgType, msg, err := conn.ReadMessage()
    if err != nil {
        log.Fatal(err)
    }
    log.Printf("Received: %s", msg)
}

客户端使用websocket.DefaultDialer访问/ws路径建立websocket连接,并在连接上发送消息与读取服务器回显的消息。