Heim > Backend-Entwicklung > Golang > So schließen Sie die WebSocket-Verbindung in Golang ordnungsgemäß

So schließen Sie die WebSocket-Verbindung in Golang ordnungsgemäß

PHPz
Freigeben: 2023-04-05 13:52:48
Original
1571 Leute haben es durchsucht

WebSocket in Golang ist ein leistungsstarkes Netzwerkprogrammierungstool, das uns die Möglichkeit bietet, in Echtzeit zu kommunizieren. Wenn wir WebSocket zur Kommunikation verwenden, kann es vorkommen, dass wir die WebSocket-Verbindung schließen müssen. Wie schließt man also die WebSocket-Verbindung in Golang korrekt? In diesem Artikel wird es Ihnen ausführlich vorgestellt.

In Golang können wir die Bibliotheken net/http und github.com/gorilla/websocket in der Standardbibliothek verwenden, um WebSocket-Verbindungen zu implementieren. In beiden Fällen gibt es Methoden zum Schließen der WebSocket-Verbindung.

Schließen Sie die WebSocket-Verbindung in der Standardbibliothek.

In der Standardbibliothek können wir die Close-Methode von WebSocket verwenden, um die Verbindung zu schließen. Nachdem wir die Schließnachricht erhalten haben, können wir die Schließmethode von WebSocket aufrufen, um die Verbindung zu schließen. Das Codebeispiel lautet wie folgt:

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 连接

    // 读写逻辑
}
Nach dem Login kopieren

Im obigen Beispiel haben wir das WebSocket-Paket in der Standardbibliothek verwendet, um eine WebSocket-Verbindung zu erstellen, und nach Beendigung der Lese- und Schreiblogik haben wir die Methode conn.Close() über aufgerufen Schlüsselwort defer, um die Verbindung zu schließen.

Schließen Sie die WebSocket-Verbindung in der Gorilla/Websocket-Bibliothek

In der Gorilla/Websocket-Bibliothek können wir die Verbindung schließen, indem wir die Close-Methode von WebSocket aufrufen:

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, ""))
}
Nach dem Login kopieren

Im obigen Beispiel haben wir Verwenden Sie die Gorilla/Websocket-Bibliothek. Eine WebSocket-Verbindung wird erstellt. Nachdem die Lese- und Schreiblogik beendet ist, wird durch Aufrufen der conn.WriteMessage-Methode eine Abschlussnachricht an die andere Partei gesendet. Auf diese Weise kann der andere Teilnehmer die Verbindung schließen, indem er eine Abschlussnachricht erhält.

Zusammenfassung

Unabhängig davon, ob Sie das WebSocket-Paket in der Standardbibliothek oder die Gorilla/Websocket-Bibliothek verwenden, können Sie die WebSocket-Verbindung über die entsprechende Methode schließen. In der tatsächlichen Entwicklung müssen wir basierend auf der tatsächlichen Situation die WebSocket-Bibliothek auswählen, die zu uns passt, um die Echtzeitkommunikationsfunktion besser zu realisieren.

Das obige ist der detaillierte Inhalt vonSo schließen Sie die WebSocket-Verbindung in Golang ordnungsgemäß. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage