Go WebSocket 如何處理斷開連線?

WBOY
發布: 2024-06-03 10:38:58
原創
895 人瀏覽過

Go WebSocket 函式庫提供 CloseHandler 機制來處理斷線。當客戶端關閉連線時,Conn 類型觸發 Close 事件。使用 defer 語句註冊 CloseHandler 函式可以監聽該事件,接收 Conn 和關閉原因常數。 CloseHandler 函數被自動調用,提供處理斷開連接和恢復應用程式的機會。

Go WebSocket 如何处理断开连接?

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

相關標籤:
go
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!