为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
斯蒂芬大帝 2023-05-08 16:24:32
我正在使用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")

}


查看完整回答
反对 回复 2023-05-08
  • 1 回答
  • 0 关注
  • 128 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信