首頁 > 後端開發 > Golang > 如何在 Go 中保持 WebSocket 連線處於活動狀態?

如何在 Go 中保持 WebSocket 連線處於活動狀態?

Susan Sarandon
發布: 2024-11-03 19:16:29
原創
408 人瀏覽過

How to Keep WebSocket Connections Alive in Go?

在Go 中維護WebSocket 連線

在使用code.google.com/p/go.net/websocket 建置的WebSocket 伺服器中,客戶端可以接收來自伺服器的通知。然而,由於長時間不活動觸發的逾時機制,客戶端與伺服器的連線可能會提前終止。

為了解決這個問題,WebSocket 協定包含了「乒乓」心跳機制。這種機制允許客戶端和伺服器相互發送 keep-alive 訊息,防止連線被中斷。

不幸的是,code.google.com/p/go.net/websocket 套件沒有原生支援此乒乓協定。作為一種解決方法,可以實現如下所示的自訂ping-pong 處理程序:

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
            }
        }
    }()
}
登入後複製

透過將此處理程序嵌入到WebSocket 伺服器中,您可以定期向客戶端發送ping 訊息並接收pong 響應作為回報。這可以確保即使在不活動期間連線也保持活動狀態。

以上是如何在 Go 中保持 WebSocket 連線處於活動狀態?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板