Maison  >  Article  >  développement back-end  >  Comment fermer correctement une connexion WebSocket dans Go

Comment fermer correctement une connexion WebSocket dans Go

PHPz
PHPzoriginal
2023-04-10 14:22:171851parcourir

Avec l'application généralisée de la technologie WebSocket, de plus en plus de programmeurs commencent à utiliser le langage Go pour implémenter les fonctions WebSocket. Lors du processus d'implémentation des fonctions WebSocket, les programmeurs sont souvent confrontés à un problème important, à savoir comment fermer correctement la connexion WebSocket dans le code du langage Go. Cet article explique comment fermer correctement une connexion WebSocket dans Go.

Méthodes de fermeture de connexion WebSocket

Il existe deux façons de fermer les connexions WebSocket :

  1. Méthode de fermeture active : Le client ou le serveur peut fermer la connexion WebSocket en envoyant un message de fermeture.
  2. Méthode de fermeture passive : lorsque la connexion TCP est déconnectée ou qu'un message d'exception est reçu, la connexion WebSocket sera également fermée.

Fermez la connexion WebSocket dans le langage GO

Dans le langage Go, nous pouvons fermer la connexion WebSocket en appelant la méthode Close() de la connexion WebSocket. Si vous souhaitez fermer activement la connexion WebSocket, vous pouvez appeler cette méthode côté client ou serveur. Si vous souhaitez fermer passivement la connexion WebSocket, vous pouvez détecter les opérations de lecture et d'écriture côté serveur. Une fois qu'une exception de connexion est détectée, appelez la méthode Close() pour fermer la connexion WebSocket.

Ce qui suit est un exemple de code pour fermer une connexion WebSocket dans 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
    }
}

Dans le code ci-dessus, nous utilisons la méthode Upgrade() fournie par Gorilla WebSocket pour mettre à niveau la connexion HTTP vers une connexion WebSocket. Lors de la gestion des connexions WebSocket, nous utilisons une boucle pour lire les messages WebSocket et appelons la méthode Close() pour fermer la connexion WebSocket lorsqu'une exception de connexion est détectée.

Il est à noter que lors de la fermeture de la connexion WebSocket, nous devons éviter les fuites de ressources. Dans le code ci-dessus, nous utilisons defer pour fermer la connexion WebSocket lors de la sortie de la fonction. Cela garantit que même si une exception se produit pendant le traitement de la fonction, la connexion WebSocket sera fermée à temps pour éviter les fuites de ressources.

Résumé

Grâce à l'introduction de cet article, je pense que les lecteurs ont une certaine compréhension de la façon de fermer correctement les connexions WebSocket dans Go. Dans le processus de développement actuel, nous devons choisir la méthode de fermeture de la connexion WebSocket en fonction du scénario d'application spécifique. Qu'il s'agisse de fermeture active ou de fermeture passive, nous devons nous assurer que les fuites de ressources sont évitées lors de la fermeture de la connexion WebSocket et assurer le fonctionnement stable du programme.

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!

Déclaration:
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