Maison  >  Article  >  développement back-end  >  Comment maintenir les connexions WebSocket actives avec Go.net/websocket ?

Comment maintenir les connexions WebSocket actives avec Go.net/websocket ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-02 12:01:02690parcourir

How to Keep WebSocket Connections Alive with Go.net/websocket?

Maintenir les connexions WebSocket avec Code.google.com/p/go.net/websocket

Les connexions WebSocket nécessitent un échange de données périodique pour rester actives. Dans le cadre du protocole WebSocket, un mécanisme de ping-pong est utilisé pour maintenir le rythme cardiaque de la connexion. Cela garantit que le client et le serveur envoient et reçoivent des données de manière cohérente, empêchant ainsi l'expiration de la connexion.

Support des fonctionnalités WebSocket

Code.google.com/p/go.net/ websocket ne supporte pas nativement le protocole ping-pong. Par conséquent, il est nécessaire de mettre en œuvre une solution personnalisée pour maintenir la connexion active.

Solution pour maintenir la connexion active

Une solution simple et efficace consiste à envoyer périodiquement des messages ping au client depuis le serveur . Ces messages ping déclencheront une réponse pong du client, indiquant que la connexion est active. Si une réponse pong n'est pas reçue dans un délai d'expiration spécifié, le serveur peut fermer la connexion.

Voici une solution immédiate pour implémenter ce mécanisme à l'aide de code.google.com/p/go.net/ websocket :

func keepAlive(c *websocket.Conn, timeout time.Duration) {
    lastResponse := time.Now()
    c.SetPongHandler(func(msg string) error {
        lastResponse = time.Now()
        return nil
    })

    go func() {
        for {
            err := c.WriteMessage(websocket.PingMessage, []byte("keepalive"))
            if err != nil {
                return 
            }   
            time.Sleep(timeout / 2)
            if (time.Since(lastResponse) > timeout) {
                c.Close()
                return
            }
        }
    }()
}

En implémentant cette solution, vous pouvez maintenir des connexions WebSocket actives même en l'absence d'échange régulier de données.

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