首頁  >  文章  >  後端開發  >  Golang如何正確關閉WebSocket連接

Golang如何正確關閉WebSocket連接

PHPz
PHPz原創
2023-04-05 13:47:161494瀏覽

Golang 中的 WebSocket 是一個強大的網路程式設計工具,它為我們提供了一種即時通訊的方式。當我們使用 WebSocket 進行通訊時,我們可能會遇到需要關閉 WebSocket 連線的情況。那麼,在 Golang 中如何正確地關閉 WebSocket 連線呢?本文將為您詳細介紹。

在 Golang 中,我們可以使用標準函式庫中的 net/http 和 github.com/gorilla/websocket 函式庫來實現 WebSocket 連線。在這兩種情況下,關閉 WebSocket 連線都有對應的方法。

關閉標準庫中的 WebSocket 連線

在標準函式庫中,我們可以使用 WebSocket 的關閉方法來關閉連線。在接收到關閉訊息後,我們可以呼叫 WebSocket 的 close 方法來關閉連線。程式碼實例如下:

func main() {
    http.HandleFunc("/ws", websocketHandler)
    http.ListenAndServe(":8080", nil)
}
func websocketHandler(w http.ResponseWriter, r *http.Request) {
    upgrader := websocket.Upgrader{
        ReadBufferSize:  1024,
        WriteBufferSize: 1024,
    }
    conn, err := upgrader.Upgrade(w, r, nil)
    if err != nil {
        log.Fatal("Upgrade: ", err)
    } 
    defer conn.Close() // 关闭 WebSocket 连接

    // 读写逻辑
}

在上述範例中,我們使用標準庫中的WebSocket 套件創建了一個WebSocket 連接,並在讀寫邏輯結束後透過defer 關鍵字呼叫了conn.Close() 方法來關閉了連線。

關閉gorilla/websocket 庫中的WebSocket 連接

在gorilla/websocket 庫中,我們可以透過呼叫WebSocket 的Close 方法來關閉連接,程式碼實例如下:

func main() {
    http.HandleFunc("/ws", websocketHandler)
    http.ListenAndServe(":8080", nil)
}
func websocketHandler(w http.ResponseWriter, r *http.Request) {
    upgrader := websocket.Upgrader{
        ReadBufferSize:  1024,
        WriteBufferSize: 1024,
    }
    conn, err := upgrader.Upgrade(w, r, nil)
    if err != nil {
        log.Fatal("Upgrade: ", err)
    } 
    defer conn.Close() // 关闭 WebSocket 连接

    // 读写逻辑
    // 关闭 WebSocket 连接
    conn.WriteMessage(websocket.CloseMessage, websocket.FormatCloseMessage(websocket.CloseNormalClosure, ""))
}

在上述範例中,我們使用gorilla/websocket 函式庫建立了一個WebSocket 連接,並在讀寫邏輯結束後透過呼叫conn.WriteMessage 方法向對方發送了關閉訊息。這樣,對方就可以透過接收到關閉訊息來關閉連線。

總結

無論是使用標準庫中的 WebSocket 套件還是使用 gorilla/websocket 庫,都可以透過對應的方法來關閉 WebSocket 連線。在實際開發中,我們需要根據實際情況來選擇適合自己的 WebSocket 庫,以便更好地實現即時通訊的功能。

以上是Golang如何正確關閉WebSocket連接的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn