在TSINGSEE青犀视频直播点播平台EasyDSS的开发过程中,我们遇到了用户提出以下需求:用户调用接口批量删除后台录像数据。
一般情况下,删除录像接口是在删除录像后,将删除结果返回。但是在此种场景下,需要删除的数据量非常多,导致整个删除过程时间较长,因此结果返回的时间也比较长,不能及时响应数据。
因此根据该客户的需求,需要将此接口修改为异步接口处理,直接返回删除成功信息,然后在后台继续删除数据。
那么什么是异步接口,服务器处理http请求,一般有同步和异步两种方式,下面简单介绍下实现方式。
收到请求,处理请求,返回结果,总请求时间为以上的代码运行完的时间。
收到请求,直接返回收到,然后在另一个任务中处理请求,该任务的时间不会计算在总请求时间中。对于仅需要返回请求已收到的http请求,最好采用异步的方式进行处理。
Golang的Gin框架,异步处理如下:
-
func main(){
-
router := gin.
Default()
-
router.
GET(
"/sync",
func(c *gin.Context) {
-
time.
Sleep(
5 * time.
Second)
-
//先Sleep 5S ,Print 后 返回http响应
-
log.
Println(
"Done! in path" +
c.
Request.
URL.
Path)
-
c.
AbortWithStatus(http.
StatusOK)
-
})
-
-
router.
GET(
"/async",
func(c *gin.Context) {
-
// 异步 执行程序 Sleep 5S 后 Print
-
cCp :=
c.
Copy()
-
go
func() {
-
time.
Sleep(
5 * time.
Second)
-
log.
Println(
"Done! in path" + cCp.
Request.
URL.
Path)
-
}()
-
-
c.
AbortWithStatus(http.
StatusOK)
-
})
-
-
router.
Run(
":8005")
-
}
其中/asyc为异步处理的代码。主要是调用了 c.Copy 代码,将请求保存在中间变量中。然后使用 go func(){} 代码在协程中处理请求信息,最后直接返回一个200的确认消息。
关于EasyDSS开发接口Gin 异步协程的处理本文就已经介绍完毕了,EasyDSS作为一款优秀的视频直播点播平台,支持阿里云、腾讯云、华为云、青云、七牛云等多种云架构,部署高效灵活。
如果大家了解EasyDSS更多相关操作或者应用场景,欢迎联系我们,TSINGSEE青犀视频云边端架构视频平台均提供测试账号供大家测试,可先测试再获取授权,欢迎了解。
转载:https://blog.csdn.net/EasyDSS/article/details/111029918
查看评论