Rumah > Artikel > pembangunan bahagian belakang > Bagaimanakah Go WebSocket mengendalikan pemutusan sambungan?
Pustaka Go WebSocket menyediakan mekanisme CloseHandler untuk mengendalikan pemutusan sambungan. Jenis Conn menyalakan acara Tutup apabila pelanggan menutup sambungan. Gunakan pernyataan penangguhan untuk mendaftarkan fungsi CloseHandler untuk mendengar acara dan menerima Conn dan pemalar sebab tutup. Fungsi CloseHandler dipanggil secara automatik, memberikan peluang untuk mengendalikan putus sambungan dan menyambung semula aplikasi.
Pergi WebSocket: Kendalikan pemutusan sambungan dengan anggun
Apabila membina aplikasi web masa nyata, WebSocket ialah alat yang berkuasa untuk komunikasi dua hala antara pelanggan dan pelayan. Walau bagaimanapun, adalah penting untuk mengendalikan pemutusan sambungan pelanggan untuk memastikan kestabilan dan kebolehpercayaan aplikasi.
Mengendalikan pemutusan sambungan
Pustaka Go WebSocket menyediakan mekanisme terbina dalam untuk mengendalikan pemutusan sambungan. Apabila pelanggan menutup sambungan, jenis [Conn
](https://pkg.go.dev/github.com/gorilla/websocket#Conn) mencetuskan Tutup
peristiwa. 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
tunda
ke [CloseHandler
](https://pkg.go.dev/github.com/gorilla/websocket #CloseHandler) Fungsi yang didaftarkan pada sambungan WebSocket: 🎜rrreee🎜CloseHandler
Fungsi ini menerima dua parameter: *Conn
dan pemalar yang menunjukkan sebab penutupan (seperti websocket .CloseNormalClosure
bermaksud penutupan biasa). Fungsi ini akan dipanggil secara automatik apabila sambungan ditutup. 🎜🎜🎜Kes Praktikal🎜🎜🎜Berikut ialah kes praktikal mudah pengendalian pemutusan: 🎜rrreee🎜Dari segi pengendalian pemotongan, CloseHandler
menyediakan cara yang mudah dan elegan untuk membantu Aplikasi pulih daripada pelanggan putuskan sambungan acara dan terus berfungsi seperti biasa. 🎜Atas ialah kandungan terperinci Bagaimanakah Go WebSocket mengendalikan pemutusan sambungan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!