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中文網其他相關文章!