飞道的博客

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

415人阅读  评论(0)

在TSINGSEE青犀视频直播点播平台EasyDSS的开发过程中,我们遇到了用户提出以下需求:用户调用接口批量删除后台录像数据。

一般情况下,删除录像接口是在删除录像后,将删除结果返回。但是在此种场景下,需要删除的数据量非常多,导致整个删除过程时间较长,因此结果返回的时间也比较长,不能及时响应数据。

因此根据该客户的需求,需要将此接口修改为异步接口处理,直接返回删除成功信息,然后在后台继续删除数据。

那么什么是异步接口,服务器处理http请求,一般有同步和异步两种方式,下面简单介绍下实现方式。

同步方式

收到请求,处理请求,返回结果,总请求时间为以上的代码运行完的时间。

异步方式

收到请求,直接返回收到,然后在另一个任务中处理请求,该任务的时间不会计算在总请求时间中。对于仅需要返回请求已收到的http请求,最好采用异步的方式进行处理。

Golang的Gin框架,异步处理如下:


  
  1. func main(){
  2. router := gin. Default()
  3. router. GET( "/sync", func(c *gin.Context) {
  4. time. Sleep( 5 * time. Second)
  5. //先Sleep 5S ,Print 后 返回http响应
  6. log. Println( "Done! in path" + c. Request. URL. Path)
  7. c. AbortWithStatus(http. StatusOK)
  8. })
  9. router. GET( "/async", func(c *gin.Context) {
  10. // 异步 执行程序 Sleep 5S 后 Print
  11. cCp := c. Copy()
  12. go func() {
  13. time. Sleep( 5 * time. Second)
  14. log. Println( "Done! in path" + cCp. Request. URL. Path)
  15. }()
  16. c. AbortWithStatus(http. StatusOK)
  17. })
  18. router. Run( ":8005")
  19. }

其中/asyc为异步处理的代码。主要是调用了 c.Copy 代码,将请求保存在中间变量中。然后使用 go func(){} 代码在协程中处理请求信息,最后直接返回一个200的确认消息。

关于EasyDSS开发接口Gin 异步协程的处理本文就已经介绍完毕了,EasyDSS作为一款优秀的视频直播点播平台,支持阿里云、腾讯云、华为云、青云、七牛云等多种云架构,部署高效灵活。

如果大家了解EasyDSS更多相关操作或者应用场景,欢迎联系我们,TSINGSEE青犀视频云边端架构视频平台均提供测试账号供大家测试,可先测试再获取授权,欢迎了解。


转载:https://blog.csdn.net/EasyDSS/article/details/111029918
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场