Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Mengekalkan Sambungan WebSocket Hidup dengan Go.net/websocket?

Bagaimana untuk Mengekalkan Sambungan WebSocket Hidup dengan Go.net/websocket?

Linda Hamilton
Linda Hamiltonasal
2024-11-02 12:01:02781semak imbas

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

Kekalkan Sambungan WebSocket dengan Code.google.com/p/go.net/websocket

Sambungan WebSocket memerlukan pertukaran data berkala untuk kekal aktif. Sebagai sebahagian daripada protokol WebSocket, mekanisme ping-pong digunakan untuk mengekalkan degupan jantung sambungan. Ini memastikan kedua-dua pelanggan dan pelayan menghantar dan menerima data secara konsisten, menghalang sambungan daripada tamat masa.

Sokongan Ciri WebSocket

Code.google.com/p/go.net/ websocket tidak menyokong protokol ping-pong secara asli. Oleh itu, adalah perlu untuk melaksanakan penyelesaian tersuai untuk memastikan sambungan hidup.

Penyelesaian untuk Mengekalkan Sambungan Aktif

Penyelesaian yang mudah dan berkesan ialah menghantar mesej ping secara berkala kepada pelanggan daripada pelayan . Mesej ping ini akan mencetuskan tindak balas pong daripada pelanggan, menunjukkan bahawa sambungan masih hidup. Jika tindak balas pong tidak diterima dalam tempoh tamat masa yang ditentukan, pelayan boleh menutup sambungan.

Berikut ialah penyelesaian drop-in untuk melaksanakan mekanisme ini menggunakan 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
            }
        }
    }()
}

Dengan melaksanakan penyelesaian ini, anda boleh mengekalkan sambungan WebSocket aktif walaupun tanpa pertukaran data biasa.

Atas ialah kandungan terperinci Bagaimana untuk Mengekalkan Sambungan WebSocket Hidup dengan Go.net/websocket?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn