Heim >Backend-Entwicklung >Golang >Wie hält man WebSocket-Verbindungen mit Go.net/websocket aufrecht?

Wie hält man WebSocket-Verbindungen mit Go.net/websocket aufrecht?

Linda Hamilton
Linda HamiltonOriginal
2024-11-02 12:01:02785Durchsuche

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

WebSocket-Verbindungen mit Code.google.com/p/go.net/websocket pflegen

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.

WebSocket-Funktionsunterstützung

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.

Lösung, um die Verbindung aktiv zu halten

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn