Go WebSocket 函式庫提供 CloseHandler 機制來處理斷線。當客戶端關閉連線時,Conn 類型觸發 Close 事件。使用 defer 語句註冊 CloseHandler 函式可以監聽該事件,接收 Conn 和關閉原因常數。 CloseHandler 函數被自動調用,提供處理斷開連接和恢復應用程式的機會。
Go WebSocket:優雅地處理斷開連接
在建立即時Web 應用程式時,WebSocket 是一個強大的工具,用於在客戶端和伺服器之間進行雙向通訊。然而,處理客戶端連線斷開的情況至關重要,以確保應用程式的穩定性和可靠性。
處理斷開連接
Go WebSocket 函式庫為處理斷開連線提供了內建機制。當客戶端關閉連線時,[Conn
](https://pkg.go.dev/github.com/gorilla/websocket#Conn) 類型會觸發 Close
事件。
要監聽此事件,可以使用defer
語句將[CloseHandler
](https://pkg.go.dev/github.com/gorilla/websocket# CloseHandler) 函式註冊到WebSocket 連線:
import ( "github.com/gorilla/websocket" ) func handleConnection(ws *websocket.Conn) { defer ws.CloseHandler()(ws, websocket.CloseNormalClosure) // ... }
CloseHandler
函式接受兩個參數:*Conn
和一個表示關閉原因的常數(例如websocket. CloseNormalClosure
表示正常關閉)。當連接被關閉時,該函數將被自動呼叫。
實戰案例
以下是一個處理斷開連接的簡單實戰案例:
package main import ( "fmt" "github.com/gorilla/websocket" "net/http" ) func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { ws, err := websocket.Upgrade(w, r, nil, nil, nil) if err != nil { fmt.Printf("upgrade error: %v", err) return } defer ws.CloseHandler()(ws, websocket.CloseNormalClosure) // 监听消息和断开连接事件 go func() { for { _, _, err := ws.ReadMessage() if err != nil { // 处理错误(例如连接断开) return } } }() }) http.ListenAndServe(":8080", nil) }
在處理斷開連接方面,CloseHandler
提供了一種簡單而優雅的方式,可以幫助應用程式從客戶端斷開事件中恢復並繼續正常運行。
以上是Go WebSocket 如何處理斷開連線?的詳細內容。更多資訊請關注PHP中文網其他相關文章!