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.
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.
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!