首頁 > 後端開發 > Golang > 如何在 Go 中取消長輪詢 HTTP 請求?

如何在 Go 中取消長輪詢 HTTP 請求?

Linda Hamilton
發布: 2024-12-01 00:10:15
原創
985 人瀏覽過

How Can I Cancel a Long-Polling HTTP Request in Go?

在Golang 中取消長輪詢

使用http.Client 實作客戶端長輪詢時,通常需要這樣做能夠提前取消請求。這可以透過從單獨的 Goroutine 手動呼叫 resp.Body.Close() 來實現,但這不是一個標準且優雅的解決方案。

使用請求上下文取消

在 Golang 中取消 HTTP 請求的更慣用的方法是使用請求上下文。透過傳遞帶有截止日期或取消函數的上下文,可以從客戶端取消請求。以下程式碼示範如何使用請求上下文取消長輪詢請求:

import (
    "context"
    "net/http"
)

func main() {
    // Create a new HTTP client with a custom transport.
    client := &http.Client{
        Transport: &http.Transport{
            // Set a timeout for the request.
            Dial: (&net.Dialer{Timeout: 5 * time.Second}).Dial,
            TLSHandshakeTimeout: 5 * time.Second,
        },
    }

    // Create a new request with a context that can be cancelled.
    ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)

    req, err := http.NewRequest("POST", "http://example.com", nil)
    if err != nil {
        panic(err)
    }
    req = req.WithContext(ctx)

    // Start the request in a goroutine and cancel it after 5 seconds.
    go func() {
        _, err := client.Do(req)
        if err != nil {
            // Handle the canceled error.
        }
    }()

    time.Sleep(5 * time.Second)
    cancel()
}
登入後複製

當呼叫cancel()函數時,請求將被取消,並在傳輸中指定Dial和TLSHandshakeTimeout將會受到尊重。

以上是如何在 Go 中取消長輪詢 HTTP 請求?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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