作者:申屠鹏会
近年来,容器化曾经是业界的共识了,不仅能够缩小运维的老本,也有助于进行产品的疾速迭代,同时,本地也能够利用容器,搭建出和生产简直一样的环境,很不便的进行开发 demo 或者进行小性能的测试部署。接下来,我将从产品的需要剖析,设计,业务编码,集成测试,到正式上线,利用声网弱小的 SDK,全程用容器化的思维,实现一个一对一课堂软件的开发。(因为资源关系,开发时候的容器环境只用 Docker,而非 K8s)。
我的项目介绍
疫情以来,传统的一对一家教曾经很难实现了,利用网络进行视频教学逐步成为支流,然而现有的腾讯会议,ZOOM,小鱼会议等平台,侧重点还是多人视频会议的场景,对于一对一辅导教学还是有所欠缺的。因而,心愿开发一个可能反对学生和老师实时音频互动,实时文字沟通,白板,课堂回放,作业安排,批改,屏幕共享的 1 对 1 课堂教学软件。
需要剖析
个别通过我的项目介绍,能够大抵晓得是一个怎么样的产品。如:产品的状态是什么,用户是什么,次要性能是什么。那么在需要分析阶段,就要细化,归类,取舍。在个别的互联网公司,常常有的还有需要评审,有了需要,能不能实现,能不能按时实现,都是须要思考的。然而当初咱们本人做 demo 的化,最简略的还是画一个思维导图,把性能分成几个模块,列一下优先级就行了。接下来就是对我的项目介绍的需要剖析。首先,咱们明确产品的状态,对于教学软件来说,最不便的就是 Web 端了,只有关上浏览器,装备一个有摄像头的电脑就能够开始学习,手机总归小了一点。而后依据介绍,一对一的教学意味着还有用户治理的性能。除此之外,最重要的就是课堂性能了,老师可能在课堂给学生讲课,录视频,共享桌面等性能,同时还须要和学生进行沟通,安排作业,因而还须要音讯告诉等性能。
那么通过以上剖析,咱们先做一个思维导图,重点是性能分类。如下
通过剖析总结,发现总共分为四个模块,别离是课堂治理,用户治理,白板性能,实时音视频,依据需要剖析,就能够开始进行下一步的技术选型了。
技术选型
当初的技术有很多,光编程语言就有几十种,每种语言都有本人的框架,通信协议也有各种 RPC,那么技术选型其实就是从宽泛的技术海中选取最适宜本人需要的技术,须要留神的是,技术选型从来不是以技术稳固或者技术先进为规范的,而是应该找最适宜的。由此,咱们开始进行技术的选型。通常我会从底层开始选取,上面我制作了一个表格,以供参考。
备选技术 | 实现性能 | 理由 |
---|---|---|
Golang | 后端语言 | 可能很不便的编译成可执行文件,而后打包成容器服务 |
html 等 | Web前端页面 | 不采纳 vue 等框架的起因是为了疾速开发体验 |
Mysql | 后端数据库 | 开源收费,够用就行 |
Redis | 缓存,用户鉴权等性能 | |
Agora SDK | 实时音视频互动 | 业界最晦涩最弱小的音视频SDK |
腾讯云 | 后端服务器 | 提供容器部署,网关等服务。 |
第三方白板 | 白板性能 |
有了大抵的技术选型之后,接下去就是进行架构设计。
架构设计
因为性能较少,服务大抵分成了Redis缓存,Mysql数据库,后端服务,前端服务,以及网关五个服务。架构图画的比拟丑,如下:
声网有个更好看的图片,我也放上来:
比照着看的化,声网的更加细化,尤其AgoraEdu云服务提供了不少性能,但咱们本人开发的时候,用本人的服务器,那须要干的事件还是有点多的。在本人设计的架构图里,所有Agora的 SDK 会被打包进前端服务里,用户治理等模块会属于后端服务,两者都是容器化的服务,之间通过https的接口进行拜访。而Mysql和Redis则提供了数据库的性能。网关层则是一个鉴权,限流和 HTTPS 加密的服务。接下去就是实战局部了。实战我会偷点懒,会把 CI/CD 的省略,我会在本地编程测试实现之后再打包镜像到服务器的Docker,如果工程量大的时候还是倡议大家用继续部署的形式来做。
环境筹备
只管从这开始曾经是实战局部了,然而“磨刀不误砍柴工”,咱们能够先筹备好所需的环境。
所需的开发环境:
操作系统:macos 或者 windows 10
编程环境:Golang
软件:Docker
有了最根底的几个之后,能够开启一些服务了。
数据库
Docker run -d -p 3306:3306 –name mysql mysql:5.7
缓存
Docker run -d -p 6379:6379 –name redis redis:4.0
查看环境是否都失常:
环境就绪后,那么接下去就是开发了。
编码开发
在编码过程中,咱们能够先编写后端的服务,而后有接口提供了,再编写前端的,如此交替式编程,疾速实现一个 Demo。
首先咱们创立两个空文件夹,一个作为后端服务,一个作为前端服务。而后关上前端服务,新建一个 Html。
为了不便起见,咱们用 CDN 的形式引入 Agora 的 SDK。
<script src="https://cdn.agora.io/sdk/release/AgoraRTCSDK-3.2.1.js"></script>
Agora 提供了一个实现音视频通话的调用过程,强烈建议浏览一下:
从上往下,以老师学生为例,业务逻辑能够是这样的:
老师通过 AgoraRTC.createClient 和 Client.init 创立本地客户端,而后通过 Client.join 退出频道。这时候能够了解为创立了一个课堂。接着通过创立本地流 - 播放本地流 - 公布本地流的过程,发送音视频数据。
那么学生端的操作就是通过订阅远端流,承受音频数据,而后进行播放。
如果要来到课堂的话,那就是通过 Client.leave 来到频道。
Agora 的 SDK 能够替咱们做这些工作,是不是十分弱小?
获取 SDK 的权限
咱们先到 agora.io 上注册一下咱们的我的项目,随后会展现一些示例代码,如图:
咱们抉择 Web 端,依照申请调用的门路,咱们须要先初始化一个客户端对象,而后填入我的项目的 APP ID 和 Token。同时,对于一对一视频场景,mode 设置为 rtc。
能够看到咱们须要传入一个 APPID 和一个 Token 还有频道。这些就由咱们的后端提供。
具体逻辑为,用户登录之后,停留在课堂治理界面。而后新建课堂,输出频道号,而后点击建设的时候,后盾返回 APPID 和 Token,同时将课堂号存入数据库。
Agora 很贴心的列出了简直所有波及的 API,如下:
部署测试
代码编写实现后,就能够打包成镜像,而后部署到服务器上,再配置一个反向代理,就能给敌人分享拜访啦,接下来咱们对前端和后端别离进行打包。
对于前端来说,咱们没有用框架,因而咱们能够间接用一个 nginx 镜像,将其中的 index 替换成咱们我的项目的 index.html 即可。
对于后端来说,Go 能够通过:CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go 不便的编译成可执行文件。咱们只须要 From 一个空镜像,copy 编译好的可执行文件即可。
后端 Dockerfile:
非常简单,只须要将编译好的可执行文件 main 用 copy 命令复制到容器外部某个目录,而后等容器起来的时候运行 ./main 运行即可。
体验分享
Agora 的开发者核心文档十分全面,要害的中央还有最佳实际的示例能够防止踩坑,同时,Agora 提供了很多新手入门的 Demo 和开源我的项目,社区也是十分的沉闷。
简直能够这么说,只有懂得根底的编程常识,不论是高级程序员还是高级程序员,也不论是后端开发还是前端开发,都很疾速的上手,如果有问题也能在开发者核心的文档库里搜到,这就是开发者核心最大的价值吧。
除此之外,通过 Agora 的 demo 体验,整个音视频的成果是出乎意料的。可能很多人会感觉,不就是音视频通话吗,微信也有啊,QQ 也有啊,甚至只有一个聊天社交软件可能都会有视频通话;先别说很多都用了声网的技术,就算是微信自研的,也会发现,雷同的网络环境下,微信视频比拟含糊,提早也会稍高,同时如果在密闭房间,回音的景象很重大。声网这点做的很不错。
除此之外,声网也是见过 SDK 笼罩最全的,
能够从这截图发现,简直涵盖了所有的平台。这些细节也能够看出声网在这方面也是投入了很多精力。
最让人惊喜的还是注册用户就送超长的视频通话时长,足够用来做一个小范畴的音视频直播利用了。感激声网。
补充
本文的例子和官网的一对一需要是差不多的,官网会更简略些,因为有 Agora 云服务,提供了开箱即用的 API,能够让前端同学缩小对后端的接触——换句话说,没有后端常识,也可能很疾速的开发一个合格的利用。
本文的目标还在于对全栈开发者有个参考,如何从需要剖析到技术选型,乃至产品部署上线,用模块化,容器化的思维疾速开发一个音视频的 Demo。
本 Demo 在线体验地址:https://agora.xabc.site
官网教程 Demo 体验地址:https://docs.agora.io/cn/Vide…
作者网站:https://xabc.site