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

Linda Hamilton
Lepaskan: 2024-11-02 12:01:02
asal
772 orang telah melayarinya

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
            }
        }
    }()
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan