如果连接丢失,golang gin 停止处理程序如何立即运行

我正在使用gin-gonic/gin来编写我的服务器。

似乎即使连接丢失,处理函数仍在运行。比如我访问http://127.0.0.1:8080/ping,突然关闭浏览器,屏幕会继续打印所有的数字。

package main


import (

    "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")

}

我应该如何立即停止处理程序功能(例如减少服务器负载)?


斯蒂芬大帝
浏览 218回答 1
1回答

繁星淼淼

当客户端断开连接时请求上下文被取消,因此只需检查c.Done()是否准备好接收:package mainimport (    "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")}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go