Heim  >  Artikel  >  Backend-Entwicklung  >  So schließen Sie eine WebSocket-Verbindung in Go ordnungsgemäß

So schließen Sie eine WebSocket-Verbindung in Go ordnungsgemäß

PHPz
PHPzOriginal
2023-04-10 14:22:171850Durchsuche

Mit der weit verbreiteten Anwendung der WebSocket-Technologie beginnen immer mehr Programmierer, die Go-Sprache zu verwenden, um WebSocket-Funktionen zu implementieren. Bei der Implementierung von WebSocket-Funktionen stehen Programmierer häufig vor einem wichtigen Problem, nämlich dem korrekten Schließen der WebSocket-Verbindung im Go-Sprachcode. In diesem Artikel wird erläutert, wie Sie eine WebSocket-Verbindung in Go ordnungsgemäß schließen.

Methoden zum Schließen von WebSocket-Verbindungen

Es gibt zwei Möglichkeiten, WebSocket-Verbindungen zu schließen:

  1. Methode zum aktiven Schließen: Der Client oder Server kann die WebSocket-Verbindung schließen, indem er eine Schließnachricht sendet.
  2. Passive Schließmethode: Wenn die TCP-Verbindung getrennt wird oder eine Ausnahmemeldung empfangen wird, wird auch die WebSocket-Verbindung geschlossen.

Schließen der WebSocket-Verbindung in der GO-Sprache

In der Go-Sprache können wir die WebSocket-Verbindung schließen, indem wir die Close()-Methode der WebSocket-Verbindung aufrufen. Wenn Sie die WebSocket-Verbindung aktiv schließen möchten, können Sie diese Methode client- oder serverseitig aufrufen. Wenn Sie die WebSocket-Verbindung passiv schließen möchten, können Sie Lese- und Schreibvorgänge auf der Serverseite erkennen. Sobald eine Verbindungsausnahme erkannt wird, rufen Sie die Methode Close() auf, um die WebSocket-Verbindung zu schließen.

Das Folgende ist ein Beispielcode zum Schließen einer WebSocket-Verbindung in Go:

func handleWebSocket(w http.ResponseWriter, r *http.Request) {
    conn, err := upgrader.Upgrade(w, r, nil)
    if err != nil {
        log.Println("upgrade:", err)
        return
    }
    defer conn.Close()

Loop:
    for {
        messageType, message, err := conn.ReadMessage()
        if err != nil {
            if websocket.IsUnexpectedCloseError(err, websocket.CloseGoingAway, websocket.CloseAbnormalClosure) {
                log.Printf("error: %v", err)
            }
            break Loop
        }
        // handle message
    }
}

Im obigen Code verwenden wir die von Gorilla WebSocket bereitgestellte Upgrade()-Methode, um die HTTP-Verbindung auf eine WebSocket-Verbindung zu aktualisieren. Bei der Verarbeitung von WebSocket-Verbindungen verwenden wir eine Schleife zum Lesen von WebSocket-Nachrichten und rufen die Methode Close() auf, um die WebSocket-Verbindung zu schließen, wenn eine Verbindungsausnahme erkannt wird.

Es ist zu beachten, dass wir beim Schließen der WebSocket-Verbindung Ressourcenlecks vermeiden müssen. Im obigen Code verwenden wir „defer“, um die WebSocket-Verbindung beim Beenden der Funktion zu schließen. Dadurch wird sichergestellt, dass die WebSocket-Verbindung auch dann rechtzeitig geschlossen wird, wenn während der Funktionsverarbeitung eine Ausnahme auftritt, um Ressourcenlecks zu vermeiden.

Zusammenfassung

Durch die Einleitung dieses Artikels glaube ich, dass die Leser ein gewisses Verständnis dafür haben, wie WebSocket-Verbindungen in Go korrekt geschlossen werden. Im eigentlichen Entwicklungsprozess müssen wir die Schließmethode der WebSocket-Verbindung entsprechend dem jeweiligen Anwendungsszenario auswählen. Unabhängig davon, ob es sich um aktives Schließen oder passives Schließen handelt, müssen wir sicherstellen, dass beim Schließen der WebSocket-Verbindung Ressourcenlecks vermieden werden, und den stabilen Betrieb des Programms sicherstellen.

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

Stellungnahme:
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