Heim > Backend-Entwicklung > Golang > Wie hält man WebSocket-Verbindungen in Go aufrecht?

Wie hält man WebSocket-Verbindungen in Go aufrecht?

Susan Sarandon
Freigeben: 2024-11-03 19:16:29
Original
471 Leute haben es durchsucht

How to Keep WebSocket Connections Alive in Go?

Aufrechterhaltung von WebSocket-Verbindungen in Go

In einem WebSocket-Server, der mit code.google.com/p/go.net/websocket erstellt wurde, können Clients Benachrichtigungen vom Server empfangen . Client-Server-Verbindungen können jedoch aufgrund eines Timeout-Mechanismus, der durch längere Inaktivität ausgelöst wird, vorzeitig beendet werden.

Um dieses Problem zu beheben, enthält das WebSocket-Protokoll einen „Ping-Pong“-Heartbeat-Mechanismus. Dieser Mechanismus ermöglicht es sowohl dem Client als auch dem Server, sich gegenseitig Keep-Alive-Nachrichten zu senden, wodurch verhindert wird, dass die Verbindung unterbrochen wird.

Leider ist dies beim code.google.com/p/go.net/websocket-Paket nicht der Fall unterstützen dieses Ping-Pong-Protokoll nativ. Um dieses Problem zu umgehen, können Sie einen benutzerdefinierten Ping-Pong-Handler wie den folgenden implementieren:

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
            }
        }
    }()
}
Nach dem Login kopieren

Durch die Einbettung dieses Handlers in Ihren WebSocket-Server können Sie regelmäßig Ping-Nachrichten an den Client senden und im Gegenzug Pong-Antworten erhalten . Dadurch wird sichergestellt, dass die Verbindung auch in Zeiten der Inaktivität aktiv bleibt.

Das obige ist der detaillierte Inhalt vonWie hält man WebSocket-Verbindungen in Go aufrecht?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage