Maison > développement back-end > Golang > Comment fermer correctement la connexion WebSocket dans Golang

Comment fermer correctement la connexion WebSocket dans Golang

PHPz
Libérer: 2023-04-05 13:52:48
original
1577 Les gens l'ont consulté

WebSocket dans Golang est un puissant outil de programmation réseau qui nous offre un moyen de communiquer en temps réel. Lorsque nous utilisons WebSocket pour communiquer, nous pouvons rencontrer des situations dans lesquelles nous devons fermer la connexion WebSocket. Alors, comment fermer correctement la connexion WebSocket dans Golang ? Cet article vous le présentera en détail.

Dans Golang, nous pouvons utiliser les bibliothèques net/http et github.com/gorilla/websocket dans la bibliothèque standard pour implémenter les connexions WebSocket. Dans les deux cas, il existe des méthodes pour fermer la connexion WebSocket.

Fermez la connexion WebSocket dans la bibliothèque standard

Dans la bibliothèque standard, nous pouvons utiliser la méthode close de WebSocket pour fermer la connexion. Après avoir reçu le message de fermeture, nous pouvons appeler la méthode close de WebSocket pour fermer la connexion. L'exemple de code est le suivant :

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

    // 读写逻辑
}
Copier après la connexion

Dans l'exemple ci-dessus, nous avons utilisé le package WebSocket dans la bibliothèque standard pour créer une connexion WebSocket, et une fois la logique de lecture et d'écriture terminée, nous avons appelé la méthode conn.Close() via le mot-clé defer pour fermer la connexion.

Fermez la connexion WebSocket dans la bibliothèque gorilla/websocket

Dans la bibliothèque gorilla/websocket, nous pouvons fermer la connexion en appelant la méthode Close de WebSocket. L'exemple de code est le suivant :

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, ""))
}
Copier après la connexion

Dans l'exemple ci-dessus, nous. utilisez la bibliothèque gorilla/websocket Une connexion WebSocket est créée et une fois la logique de lecture et d'écriture terminée, un message de clôture est envoyé à l'autre partie en appelant la méthode conn.WriteMessage. De cette façon, l'autre partie peut fermer la connexion en recevant un message de fermeture.

Résumé

Que vous utilisiez le package WebSocket dans la bibliothèque standard ou que vous utilisiez la bibliothèque gorilla/websocket, vous pouvez fermer la connexion WebSocket via la méthode correspondante. Dans le développement réel, nous devons choisir la bibliothèque WebSocket qui nous convient en fonction de la situation réelle afin de mieux réaliser la fonction de communication en temps réel.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal