RTC服务之策略切换

前言:
最近在接入多个RTC服务厂商,目前也了解了常用的一些厂商,如:腾讯、网易、声网、即构,阿里等等。在总体调用上类似,但某些SDK的细节处理上较为奇葩。
如果对于RTC服务有很高的要求或者需要做备选方案,那么接入多家RTC厂商就很有必要。值得一提的是,在接入多个SDK厂商之后,可以依据流量的大小,策略的分配不同厂商的RTC服务,从而降低费用。并且,当其中一家厂商的延迟较高时,可以通过切换不同的厂商RTC来提供服务,从而达到高稳定性。

为什么要做策略切换

  • 提高稳定性:由于故障性原因导致某些厂商RTC服务异常,或者由于网络阻塞延迟卡顿黑屏等等影响用户体验;服务端在通过对一些关键性指标分析后,从而策略的选择一种更适合当前的RTC厂商服务;
  • 降低资费:随着用户量的增长,从而带来了RTC服务的流量大大增长,那么某些厂商的资费也会大大增加,如果通过合理的分配流量到不同的厂商服务,那么即可通过较低的成本使用更为可靠的服务;(并且不会依赖某一家厂商,这点很重要哦)

策略切换

说到策略切换,那么如何去做呢?
客户端:
首先,我们需要确定自己的业务层有哪些需求。确定了业务层需求,接着就是去定义我们需要用到的RTC基础模型,基础定义,基础方法等。我们称之为 RTCManagerDef
基础定义中包括使用场景(Scene),角色(Role),网络质量(NetworkQuality)。
基础模型中包括不同厂商所需要的传参。
基础方法是对RTC服务商的抽象方法,由业务层直接调用,具体实现是基于RTC服务商。

其次,我们就可以用到熟悉的设计模式去设计整个动态切换的层级和功能类。这里是我对自己业务所设计的策略切换的RTC管理类。

策略切换

结构:

  • RTCManager(管理类):为业务层提供调用的方法;合理封装基础调用方法是这个管理类的重点;
  • RTCProtocal(RTC协议) :为业务层提供的RTC事件回调;
  • Context (关联类):解决内部调用不同RTC厂商服务,切换厂商服务策略以及关联内部实现和外部调用是这个类的作用;
  • EngineStrategy (引擎策略类):引擎策略的基础类,规范化众多RTC厂商服务的调用方法,统一内部方法;
  • ConcreteEngineStrategy (具体策略类):继承于引擎策略类,实现引擎策略类的方法,以及实现引擎内部事件回调,并回调RTCProtocal的事件;

整体架构基于设计模式中的策略、工厂、适配器等,这种架构主要是考虑到后期的拓展更多的厂商。 不能说是最好的方案,但是目前比较适合当前项目,对后面拓展比较友好,接入新的厂商不会影响现有的上层逻辑;
这种设计层级上可能会比较多,但是优点也是很明显的,随时可以切换不同的服务。

架构说完,就谈谈具体接入的问题吧;
因为想要做到可以策略切换不同的Service,所以需要将众多的Service providers适配自己的规则,这无疑是一件很难得事情,因为不同的RTC厂商内部的实现都各不相同,所以需要足够了解他们的调用顺序以及方法实现,状态回调等等。这需要和他们的开发者深度沟通之后才可以了解到。策略切换的重点就是使用自己制定的规范适配众多RTC厂商服务;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 五月份时,英特尔宣布推出OpenVINO工具包,它主要应用于将计算机图形和深度学习技术整合到前沿的视觉应用中。Op...
    达微阅读 5,466评论 0 0
  • 我是黑夜里大雨纷飞的人啊 1 “又到一年六月,有人笑有人哭,有人欢乐有人忧愁,有人惊喜有人失落,有的觉得收获满满有...
    陌忘宇阅读 12,770评论 28 53
  • 信任包括信任自己和信任他人 很多时候,很多事情,失败、遗憾、错过,源于不自信,不信任他人 觉得自己做不成,别人做不...
    吴氵晃阅读 11,375评论 4 8
  • 步骤:发微博01-导航栏内容 -> 发微博02-自定义TextView -> 发微博03-完善TextView和...
    dibadalu阅读 8,474评论 1 3
  • 回这一趟老家,心里多了两个疙瘩。第一是堂姐现在谈了一个有妇之夫,在她的语言中感觉,她不打算跟他有太长远的计划,这让...
    安九阅读 8,915评论 2 4

友情链接更多精彩内容