我正在使用gin-gonic/gin來編寫我的服務器。似乎即使連接丟失,處理函數仍在運行。比如我訪問http://127.0.0.1:8080/ping,突然關閉瀏覽器,屏幕會繼續打印所有的數字。package mainimport ( "github.com/gin-gonic/gin" "log" "time")func main() { r := gin.Default() r.GET("/ping", func(c *gin.Context) { for i := 1; i < 15; i++ { time.Sleep(time.Second * 1) log.Println(i) } c.JSON(200, gin.H{ "message": "pong", }) }) r.Run("127.0.0.1:8080")}我應該如何立即停止處理程序功能(例如減少服務器負載)?
1 回答

繁星淼淼
TA貢獻1775條經驗 獲得超11個贊
當客戶端斷開連接時請求上下文被取消,因此只需檢查c.Done()是否準備好接收:
package main
import (
? ? "log"
? ? "time"
? ? "github.com/gin-gonic/gin"
)
func main() {
? ? r := gin.Default()
? ? r.GET("/ping", func(c *gin.Context) {
? ? ? ? t := time.NewTicker(1 * time.Second)
? ? ? ? defer t.Stop()
? ? ? ? for i := 1; i < 15; i++ {
? ? ? ? ? ? select {
? ? ? ? ? ? case <-t.C:
? ? ? ? ? ? ? ? log.Println(i)
? ? ? ? ? ? case <-c.Request.Context().Done():
? ? ? ? ? ? ? ? // client gave up
? ? ? ? ? ? ? ? return
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? c.JSON(200, gin.H{
? ? ? ? ? ? "message": "pong",
? ? ? ? })
? ? })
? ? r.Run("127.0.0.1:8080")
}
- 1 回答
- 0 關注
- 267 瀏覽
添加回答
舉報
0/150
提交
取消