首頁 >後端開發 >Golang >如何使用 Go.net/websocket 保持 WebSocket 連線處於活動狀態?

如何使用 Go.net/websocket 保持 WebSocket 連線處於活動狀態?

Linda Hamilton
Linda Hamilton原創
2024-11-02 12:01:02784瀏覽

How to Keep WebSocket Connections Alive with Go.net/websocket?

使用 Code.google.com/p/go.net/websocket 維護 WebSocket 連線

WebSocket 連線需要定期進行資料交換才能維持活動狀態。作為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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn