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

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

  • 相关阅读:
    解决HbuilderX乱码问题
    IDEA
    关于Git开发的一些注意事项
    postgresql
    启动新拉取项目流程
    关于能发布但无法打包的问题
    关于人脸感知设备(类似门禁考勤设备)搜索添加显示成功但却添加不上的问题
    在GitLab上创建项目并上传初始文件
    中控标替换成白标开发
    工厂模式
  • 原文地址:https://www.cnblogs.com/easydss/p/14116433.html
Copyright © 2011-2022 走看看