亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如果連接丟失,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 關注
  • 267 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號