专栏首页EasyNVR企业远程视频会议云服务EasyRTC-SFU版本支持 https 功能设计逻辑

企业远程视频会议云服务EasyRTC-SFU版本支持 https 功能设计逻辑

在EasyRTC-SFU软件中,后台管理程序使用 Go 语言开发。在部分应用场景中,为了安全,需要支持 HTTPS 协议。因此整个后台管理程序,需要支持 HTTP 和 HTTPS 同时运行。

在 EasyRTC-SFU 版本中使用 Gin 作为 Web 框架。在 Go 语言 Web 项目中,快速支持 HTTPS 仅需要使用 secure 项目作为处理 HTTPS 的中间件,就能很快的进行开发。两个项目的地址如下:

github.com/gin-gonic/gin github.com/unrolled/secure

具体代码如下:

func main() {
   r := gin.Default()
   https := gin.Default()
   app := app.NewApp()
 
   if app.Config().HttpsPort > 0 {
      httpsPort := fmt.Sprintf(":%d", app.Config().HttpsPort)
      https.Use(TlsHandler(httpsPort))
      routes.Setup(https, app)
      go https.RunTLS(httpsPort, app.Config().CertPath, app.Config().KeyPath)
   }
 
   routes.Setup(r, app)
 
   r.Run(fmt.Sprintf(":%d", app.Config().Port))
}
 
// 初始 TLS
func TlsHandler(httpsPort string) gin.HandlerFunc {
   return func(c *gin.Context) {
      secureMiddleware := secure.New(secure.Options{
         SSLRedirect: true,
         SSLHost:     httpsPort,
      })
      err := secureMiddleware.Process(c.Writer, c.Request)
      if err != nil {
         return
      }
      c.Next()
   }
}
https := gin.Default()

具体逻辑如下:

首先使用 Gin 生成对应的引擎 https。

https := gin.Default()

将 Gin 生成的引擎 https 添加中间件,中间件为 TlsHandler 方法处理。后面具体分析。生成引擎后,routes.Setup() 方法为安装对应路由处理程序,不在此展示。

最后使用 go 协程语法开启一个监听 httpsPort 端口的协程。其中 CertPath 和 KeyPath 为配置的公钥证书和私钥密码所在的路径。

https.Use(TlsHandler(httpsPort))
routes.Setup(https, app)
go https.RunTLS(httpsPort, app.Config().CertPath, app.Config().KeyPath)

如果程序中仅需要支持 HTTPS 协议,并且主线程中没有其他阻塞程序存在,则需要去除 go 关键字。

secure 为 Go 项目实现 https 的中间件程序。中间件的具体含义:A发送请求给B进行处理数据,此时可以额外添加C,把C作为A和B之间的中间桥梁,即由原先的A-B变为A-C-B。对于A和C来说,并不一定知道C的存在,这样代码逻辑更清晰。

TlsHandler 方法中的主要作用为使用 secure 项目处理请求和响应。具体代码为调用 secure.New(), 然后调用 Process() 方法把 请求 request 和响应 response 进行处理即可。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 视频监控系统视频上云解决方案EasyCVR集成海康EHome私有协议系列——报警模块说明

    视频联网云平台EasyCVR是一个集视频联网共享、存储、流媒体转发、视频转码、视频上云、智能分析统一等多种功能为一体的流媒体视频服务融合性平台。EasyCVR可...

    EasyNVR
  • 在aarch版编译libEasyRTSPClient库无法通过问题解决

    RTSPClient因其兼容性强,各种各样RTSP的兼容,各种各样的场景,大部分IPC的内置服务器都是基于live555的RTSPServer来二次开发实现的。...

    EasyNVR
  • Docker环境搭建和全终端无插件网页摄像机直播管理服务EasyNVS的部署方案详解

    在产品实际应用中,当多个EasyNVR分布在不同的区域或者不同的网络环境下,集中管理就显得至关重要,此时需要一个可以集中管控这些EasyNVR,并且云端输出的平...

    EasyNVR
  • Image classification in frequency domain with 2SReLU: a second harmonics superposition activation fu

    github:https: //gitlab.com/thomio/2srelu.

    绝命生
  • java实现支付宝支付完整过程(沙箱测试环境,下篇整合ssm)

    好好学java
  • 【面试说】一年半前端 Bigo 一二三 面

    笔者其实是三月份就面的 Bigo,当时工作经验算一年半多。之所以现在才发,其实是之前虽然总结了,但多半是自己总结归纳复盘用,有点粗糙,现在重新整理,希望对大家有...

    GopalFeng
  • 技能 | 只要五步,教你撸一个缩减版国际象棋AI

    从国际象棋到中国围棋,人类与“机器”已经较上了劲。 看过那么多场对战,你是不是也想上手体验一把? 来来来,简单五步,手把手教你撸一个缩减版的国际象棋AI。 ...

    AI科技大本营
  • PHP下载文件函数与用法示例

    更多关于PHP相关内容感兴趣的读者可查看本站专题:《php文件操作总结》、《PHP目录操作技巧汇总》、《PHP常用遍历算法与技巧总结》、《PHP数据结构与算法教...

    砸漏
  • 人生第一个过万 Star 的 github 项目诞生

    写 Spring Boot 开源项目走入第三个年头,终于有一个开源项目要破万 Star 了,请各位读者大人批评指正。

    纯洁的微笑
  • 好用的批量扫米工具DomainMegaBot

    项目地址 https://github.com/Har-Kuun/DomainMegaBot

    Huramkin

扫码关注云+社区

领取腾讯云代金券