gin-sync-async 异步处理

gin-demo\chapter-04\exercise-4\main.go

知识要点:

处理一些耗时任务时,使用异步操作

代码:

package main

import (
	"log"
	"net/http"
	"time"

	"github.com/gin-gonic/gin"
)

func main() {
	router := gin.Default()
	//1. 异步,类似 setTimeout,先返回结果, go func 语句后台继续执行
	router.GET("/upload-async", func(c *gin.Context) {
		// goroutine 中只能使用只读的上下文 c.Copy()
		cCp := c.Copy()
		go func() {
			time.Sleep(5 * time.Second)
			// 注意使用只读上下文
			log.Println("Done! in path " + cCp.Request.URL.Path)
		}()
		c.JSON(http.StatusOK, "异步请求成功,请稍后尝试")
	})
	//2. 同步,要等待 处理时间,处理完成后返回
	router.GET("/sync", func(c *gin.Context) {
		time.Sleep(5 * time.Second)
		// 注意可以使用原始上下文
		log.Println("Done! in path " + c.Request.URL.Path)
		c.JSON(http.StatusOK, "同步处理中,耗时 5s ")
	})

	// Listen and serve on 0.0.0.0:8080
	router.Run(":8080")
}

测试:

@base = 127.0.0.1:8080

### 
GET http://{{base}}/upload-async HTTP/1.1

###
GET http://{{base}}/sync HTTP/1.1