Heim > Artikel > Backend-Entwicklung > Wie geht Go WebSocket mit Verbindungsabbrüchen um?
Die Go WebSocket-Bibliothek bietet den CloseHandler-Mechanismus zur Verarbeitung von Verbindungsabbrüchen. Der Conn-Typ löst das Close-Ereignis aus, wenn der Client die Verbindung schließt. Verwenden Sie die Defer-Anweisung, um die CloseHandler-Funktion zu registrieren, um das Ereignis abzuhören und Conn- und Close-Grundkonstanten zu empfangen. Die CloseHandler-Funktion wird automatisch aufgerufen und bietet die Möglichkeit, die Trennung zu verarbeiten und die Anwendung fortzusetzen.
Gehen Sie zu WebSocket: Behandeln Sie Verbindungsabbrüche elegant.
Beim Erstellen von Echtzeit-Webanwendungen ist WebSocket ein leistungsstarkes Tool für die bidirektionale Kommunikation zwischen Client und Server. Es ist jedoch wichtig, Client-Trennungen zu bewältigen, um die Stabilität und Zuverlässigkeit der Anwendung sicherzustellen.
Umgang mit Verbindungsabbrüchen
Die Go WebSocket-Bibliothek bietet integrierte Mechanismen für den Umgang mit Verbindungsabbrüchen. Wenn der Client die Verbindung schließt, löst der Typ [Conn
](https://pkg.go.dev/github.com/gorilla/websocket#Conn) den Befehl Close
aus Ereignis . 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
defer
-Anweisung für [CloseHandler
](https://pkg.go.dev/github.com/gorilla/websocket) verwenden #CloseHandler) Für die WebSocket-Verbindung registrierte Funktion: 🎜rrreee🎜CloseHandler
Die Funktion akzeptiert zwei Parameter: *Conn
und eine Konstante, die den Grund für das Schließen angibt (z. B. websocket .CloseNormalClosure
bedeutet normales Herunterfahren). Diese Funktion wird automatisch aufgerufen, wenn die Verbindung geschlossen wird. 🎜🎜🎜Praktischer Fall🎜🎜🎜Das Folgende ist ein einfacher praktischer Fall der Behandlung von Verbindungsabbrüchen: 🎜rrreee🎜In Bezug auf die Behandlung von Verbindungsabbrüchen bietet CloseHandler
eine einfache und elegante Möglichkeit, die Anwendung beim Wiederherstellen vom Client zu unterstützen Trennereignis und funktioniert weiterhin normal. 🎜Das obige ist der detaillierte Inhalt vonWie geht Go WebSocket mit Verbindungsabbrüchen um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!