WebSocket 連線需要定期進行資料交換才能維持活動狀態。作為WebSocket協定的一部分,乒乓機制用於維護連線心跳。這可以確保客戶端和伺服器始終發送和接收數據,從而防止連接逾時。
Code.google.com/p/go.net/ websocket 本身不支援 ping-pong 協定。因此,有必要實作一個自訂的解決方案來保持連線。
一個簡單有效的解決方案是定期從伺服器傳送 ping 訊息到客戶端。這些 ping 訊息將觸發客戶端的 pong 回應,表示連線處於活動狀態。如果在指定的逾時時間內未收到 pong 回應,伺服器可以關閉連線。
這裡是使用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 } } }() }
透過實施此解決方案,即使在沒有定期資料交換的情況下,您也可以保持活動的WebSocket 連線。
以上是如何使用 Go.net/websocket 保持 WebSocket 連線處於活動狀態?的詳細內容。更多資訊請關注PHP中文網其他相關文章!