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.
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 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!