Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Mengekalkan Sambungan WebSocket Hidup dalam Go?

Bagaimana untuk Mengekalkan Sambungan WebSocket Hidup dalam Go?

Susan Sarandon
Lepaskan: 2024-11-03 19:16:29
asal
408 orang telah melayarinya

How to Keep WebSocket Connections Alive in Go?

Mengekalkan Sambungan WebSocket dalam Go

Dalam pelayan WebSocket yang dibina menggunakan code.google.com/p/go.net/websocket, pelanggan boleh menerima pemberitahuan daripada pelayan . Walau bagaimanapun, sambungan pelanggan-pelayan mungkin ditamatkan lebih awal disebabkan oleh mekanisme tamat masa yang dicetuskan oleh ketidakaktifan yang berpanjangan.

Untuk menangani isu ini, protokol WebSocket termasuk mekanisme degupan jantung "ping-pong". Mekanisme ini membolehkan kedua-dua pelanggan dan pelayan menghantar mesej kekal hidup antara satu sama lain, menghalang sambungan daripada terputus.

Malangnya, pakej code.google.com/p/go.net/websocket tidak menyokong protokol ping-pong ini secara asli. Sebagai penyelesaian, seseorang boleh melaksanakan pengendali ping-pong tersuai seperti berikut:

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

Dengan membenamkan pengendali ini dalam pelayan WebSocket anda, anda boleh menghantar mesej ping berkala kepada pelanggan dan menerima balasan pong sebagai balasan . Ini memastikan sambungan kekal aktif walaupun dalam tempoh tidak aktif.

Atas ialah kandungan terperinci Bagaimana untuk Mengekalkan Sambungan WebSocket Hidup dalam Go?. 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