Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Mengekalkan Sambungan WebSocket Hidup 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 } } }() }
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!