Heim >Backend-Entwicklung >Golang >Wie hält man WebSocket-Verbindungen mit Go.net/websocket aufrecht?
WebSocket-Verbindungen erfordern einen regelmäßigen Datenaustausch, um aktiv zu bleiben. Als Teil des WebSocket-Protokolls wird ein Ping-Pong-Mechanismus verwendet, um den Verbindungs-Heartbeat aufrechtzuerhalten. Dadurch wird sichergestellt, dass sowohl der Client als auch der Server konsistent Daten senden und empfangen, wodurch ein Timeout der Verbindung verhindert wird.
Code.google.com/p/go.net/ Websocket unterstützt das Ping-Pong-Protokoll nicht nativ. Daher ist es notwendig, eine benutzerdefinierte Lösung zu implementieren, um die Verbindung aufrechtzuerhalten.
Eine einfache und effektive Lösung besteht darin, regelmäßig Ping-Nachrichten vom Server an den Client zu senden . Diese Ping-Nachrichten lösen eine Pong-Antwort des Clients aus, die anzeigt, dass die Verbindung aktiv ist. Wenn innerhalb eines bestimmten Timeout-Zeitraums keine Pong-Antwort empfangen wird, kann der Server die Verbindung schließen.
Hier ist eine Drop-in-Lösung zur Implementierung dieses Mechanismus mithilfe von 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 } } }() }
Durch die Implementierung dieser Lösung können Sie aktive WebSocket-Verbindungen auch dann aufrechterhalten, wenn kein regelmäßiger Datenaustausch stattfindet.
Das obige ist der detaillierte Inhalt vonWie hält man WebSocket-Verbindungen mit Go.net/websocket aufrecht?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!