zoukankan      html  css  js  c++  java
  • 企业远程视频会议云服务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 进行处理即可。

    关于EasyRTC

    EasyRTC是由TSINGSEE团队多年来在音视频领域上的技术积累而研发的,提供全平台互通高品质实时视频通话服务,支持微信小程序、H5页面、APP、PC客户端等接入方式之间互通,快速从零开始搭建实时音视频通信;支持多人至百万人视频通话,满足语音视频社交。如果大家想详细了解,可以访问EasyRTC官方网站,欢迎咨询。

     
  • 相关阅读:
    I.MX6 Surfaceflinger 机制
    理解 Android Fragment
    RPi 2B DDNS 动态域名
    RPi 2B IPC webcam server
    理解 Android MVP 开发模式
    I.MX6 system.img unpack repack
    can't set android permissions
    VMware Ubuntu 共享文件夹
    解决oracle数据库连接不上的问题
    perfect-scrollbar示例
  • 原文地址:https://www.cnblogs.com/EasyNVR/p/13644553.html
Copyright © 2011-2022 走看看