Maison > Article > développement back-end > Comment maintenir les connexions WebSocket actives dans Go ?
Dans un serveur WebSocket créé à l'aide de code.google.com/p/go.net/websocket, les clients peuvent recevoir des notifications du serveur . Cependant, les connexions client-serveur peuvent se terminer prématurément en raison d'un mécanisme de délai d'attente déclenché par une inactivité prolongée.
Pour résoudre ce problème, le protocole WebSocket inclut un mécanisme de battement de cœur « ping-pong ». Ce mécanisme permet au client et au serveur de s'envoyer des messages de maintien, empêchant ainsi la connexion de s'interrompre.
Malheureusement, le package code.google.com/p/go.net/websocket ne le fait pas. supporte nativement ce protocole de ping-pong. Pour contourner ce problème, vous pouvez implémenter un gestionnaire de ping-pong personnalisé comme celui-ci :
import ( "time" "github.com/gorilla/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 intégrant ce gestionnaire dans votre serveur WebSocket, vous pouvez envoyer des messages ping périodiques au client et recevoir des réponses pong en retour. . Cela garantit que la connexion reste active même pendant les périodes d'inactivité.
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!