菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
72
0

【开发记录】RTMP协议视频平台EasyDSS通过Gin异步协程的处理代码实现批量删除录像功能

原创
05/13 14:22
阅读数 6594

在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青犀视频云边端架构视频平台均提供测试账号供大家测试,可先测试再获取授权,欢迎了解。

发表评论

0/200
72 点赞
0 评论
收藏