您当前的位置:首页 > 电脑百科 > 程序开发 > 架构

百万级高并发WebRTC流媒体服务器设计与开发

时间:2022-10-07 19:50:24  来源:网易号  作者:石哥学长

访问者模式:从介绍到实践

百万级高并发WebRTC流媒体服务器设计与开发

download:https://www.zxit666.com/1305/

01什么是访客模式?

访问者模式的定义如下,是指在不改变数据结构的情况下,提前定义新的操作。

封装了一些作用于数据结构中元素的操作,可以在不改变数据结构的情况下定义作用于这些元素的新操作。

但在实际应用中,我发现有些例子并非如此。在一些例子中,没有稳定的数据结构,但有稳定的算法。在亦舒看来,访客模式是:固定不变的,开放可变的。

先说一个生活中的例子:一个科学家凭记忆面试。众所周知,科学家在接受采访时,肯定有一些程序上的限制。你是不可能随便提问的。我们假设这个过程是:先问科学家的学校经历,再谈你的工作经历,最后谈你的科研成果。那么这个过程中固定的是什么呢?固定的是面试流程。有什么变化?改变的是,不同的记者可能会根据他们的学校经历提出不同的问题。

按照我们之前的理解,访客模式其实就是把不可改变的东西固定下来,把变化打开。然后我们可以抽象出科学家的采访。

首先需要有一个Visitor类,定义了一些外部(记者)可以做的事情(提问学校经历、工作经历、科研成果)。

公共接口访问者{

public void askSchoolExperience(字符串名);

public void askWorkExperience(字符串名);

public void askScienceAchievement(字符串名);

}

然后声明一个XinhuaVisitor类来实现Visitor类,意思是新华社的一个记者(访问者)要访问科学家。

公共类XinhuaVisitor实现访问者{

@覆盖

public void askSchoolExperience(字符串名称){

System.out.printf("请问%s:你在学校最大的成就是什么?n ",名称);

}

@覆盖

public void askWorkExperience(字符串名称){

System.out.printf("请问%s:工作中最难忘的事是什么?n ",名称);

}

@覆盖

public void askScienceAchievement(字符串名称){

System.out.printf("请问%s:最大的科研成果是什么?",姓名);

}

}

然后声明一个科学家类,说明是科学家。科学家通过一个accept()方法接收记者(访问者)的采访申请并存储。科学家定义了一种面试方法,把面试过程固定死。只有我教你问什么,我才会让你(记者)提问。

公共类科学家{

私人访问者访问者;

私有字符串名称;

私人科学家(){}

公共科学家(字符串名称){

this.name = name

}

公共void接受(访问者访问者){

this.visitor =访问者;

}

公开无效面试(){

system . out . println("-");

System.out.println(" -开始说学校经历-");

visitor.askSchoolExperience(姓名);

System.out.println(" -开始说工作经历-");

visitor.askWorkExperience(名称);

System.out.println(" -开始说科研成果-");

visitor.askScienceAchievement(姓名);

}

}

最后,我们声明一个场景类客户端来模拟面试过程。

公共类客户端{

公共静态void mAIn(String[] args) {

科学家杨=新科学家();

yang . accept(new XinhuaVisitor());

yang . interview();

}

}

操作的结果是:

-访问开始

-开始谈论学校经历-

请问,杨振宁:你在学校最大的成就是什么?

-开始谈论工作经历-

请问杨振宁:你在工作中最难忘的观点是什么?

-开始谈论科研成果-

请问杨振宁:最大的科研成就是什么?

看到这里,大家对访客模式的本质(固定不变,开放可变)有了更感性的认识。在这个例子中,不变的、固定的是面试过程。改变的是你可以问不同的问题。

一般来说,访问者模式的类结构如下图所示:

访问者访问者界面。访问者定义访问者可以做什么。这就需要你分析什么是可改变的,把这些可改变的内容抽象成一个访问者接口方法,把它开放出来。被访问者的信息实际上是通过访问者的参数传递的。

具体访问者。特定访问者定义了特定类型访问者的实现。对于新华社记者来说,他们更关心杨振宁的科学成就,所以提问时更倾向于挖掘成就。但对于青年报记者来说,他们的读者是青少年,他们更关注杨振宁在学习和工作中的精神。

元素具体元素。这指的是特定的被访问的类,在我们的例子中,是科学家类。一般情况下,我们会提供一个accept()方法来接收访问者参数,这将相当于接受它的模型应用。然而,这种方法不是必需的。只要能得到visitor对象,就可以定义这个参数传递。

对于访问者模式,最重要的是访问者、具体访问者和元素。Visitor和ConcreteVisitor定义了访问者具体能做什么,被访问者的参数通过参数传递给访问者。元素通过各种方法获取被访问的对象,通常是通过accept()方法,但这不是绝对的。

应该注意的是,我们对设计模式的研究侧重于理解类之间的关系以及它们所传达的信息。至于如何传递,是通过accept()方法还是通过构造函数,都不是重点。



Tags:WebRTC   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
WebRTC vs WebSocket?WebRTC + WebSocket?
WebRTC vs WebSocket1.什么是WebRTC?WebRTC 是一组 JavaScript API,可以在两个浏览器之间建立点对点连接, 实现音频和视频等数据的传输,也可以用它创建有语音/视频通话功能的应...【详细内容】
2023-01-04  Search: WebRTC  点击:(526)  评论:(0)  加入收藏
WEBRtc 实现视频会议
WebRTC(Web Real-Time Communication)是为了让开发者在浏览器实现多媒体交换的技术,于2011年被加入W3C规范。当前的支持情况可以见下图。 WebRTC的核心在于建立PeerConnection...【详细内容】
2022-11-11  Search: WebRTC  点击:(664)  评论:(0)  加入收藏
百万级高并发WebRTC流媒体服务器设计与开发
访问者模式:从介绍到实践百万级高并发WebRTC流媒体服务器设计与开发download:https://www.zxit666.com/1305/01什么是访客模式?访问者模式的定义如下,是指在不改变数据结构的情...【详细内容】
2022-10-07  Search: WebRTC  点击:(362)  评论:(0)  加入收藏
音视频系列:Webrtc音视频通话
音视频通话难点:音视频编解码原理IP4中,设备在各自的内网,需要p2p打洞音频降噪和回声消除信令服务器:设备连接的socket服务器传递各个设备之间的信息:传递各个节点的sdp信息,传递i...【详细内容】
2022-06-16  Search: WebRTC  点击:(436)  评论:(0)  加入收藏
WebRTC记录音视频流
监听开始事件 EventTarget.addEventListener() 方法将指定的监听器注册到 EventTarget 上,当该对象触发指定的事件时,指定的回调函数就会被执行。 事件目标可以是一个文档上的...【详细内容】
2022-02-17  Search: WebRTC  点击:(246)  评论:(0)  加入收藏
Android WebRTC 对 AudioRecord 的使用
AudioRecord 是 Android 基于原始PCM音频数据录制的类,WebRCT 对其封装的代码位置位于 org/webrtc/audio/WebRtcAudioRecord.java,接下来我们学习一下 AudioRecord 是如何创建...【详细内容】
2022-01-13  Search: WebRTC  点击:(394)  评论:(0)  加入收藏
在音频通话中,如何将WebRTC音频通话升级为视频通话
我们有时候在音频通话过程中,想要改成视频通话。如果挂断当前的通话再重新发起视频通话就会显得比较麻烦。 因此很多app提供了将音频通话升级成视频通话的功能,同时也有将视频...【详细内容】
2021-12-23  Search: WebRTC  点击:(553)  评论:(0)  加入收藏
音视频流媒体开发WebRTC 基础知识 -- ICE 交互总结
【网络通信 -- WebRTC】WebRTC 基础知识 -- ICE 交互总结【1】ICE 的一般概念简介ICE 角色offer (主动发起)的一方为 controlling 角色answer (被动接受)的一方为 controlle...【详细内容】
2021-11-30  Search: WebRTC  点击:(438)  评论:(0)  加入收藏
IOS技术分享|WebRTC iOS源码下载&编译
前言最近对 WebRTC iOS 端源码进行了下载和编译,网上针对 WebRTC iOS 端的编译文章基本都是几年前的,有些地方已经不适用于最新版的 WebRTC 的编译,简单记录下载&编译的过程,以...【详细内容】
2021-11-10  Search: WebRTC  点击:(732)  评论:(0)  加入收藏
使用WebRTC和WebVR进行VR视频通话
Web平台上的WebRTC并不是其唯一的媒体API。WebVR说明书于几年前被引入来为浏览器中的虚拟现实设备提供支持。目前已经变为新的WebXR设备API说明书。今年夏天我在ClueCon,Dan...【详细内容】
2021-08-27  Search: WebRTC  点击:(396)  评论:(0)  加入收藏
▌简易百科推荐
对于微服务架构监控应该遵守的原则
随着软件交付方式的变革,微服务架构的兴起使得软件开发变得更加快速和灵活。在这种情况下,监控系统成为了微服务控制系统的核心组成部分。随着软件的复杂性不断增加,了解系统的...【详细内容】
2024-04-03  步步运维步步坑    Tags:架构   点击:(5)  评论:(0)  加入收藏
大模型应用的 10 种架构模式
作者 | 曹洪伟在塑造新领域的过程中,我们往往依赖于一些经过实践验证的策略、方法和模式。这种观念对于软件工程领域的专业人士来说,已经司空见惯,设计模式已成为程序员们的重...【详细内容】
2024-03-27    InfoQ  Tags:架构模式   点击:(13)  评论:(0)  加入收藏
哈啰云原生架构落地实践
一、弹性伸缩技术实践1.全网容器化后一线研发的使用问题全网容器化后一线研发会面临一系列使用问题,包括时机、容量、效率和成本问题,弹性伸缩是云原生容器化后的必然技术选择...【详细内容】
2024-03-27  哈啰技术  微信公众号  Tags:架构   点击:(10)  评论:(0)  加入收藏
DDD 与 CQRS 才是黄金组合
在日常工作中,你是否也遇到过下面几种情况: 使用一个已有接口进行业务开发,上线后出现严重的性能问题,被老板当众质疑:“你为什么不使用缓存接口,这个接口全部走数据库,这怎么能扛...【详细内容】
2024-03-27  dbaplus社群    Tags:DDD   点击:(12)  评论:(0)  加入收藏
高并发架构设计(三大利器:缓存、限流和降级)
软件系统有三个追求:高性能、高并发、高可用,俗称三高。本篇讨论高并发,从高并发是什么到高并发应对的策略、缓存、限流、降级等。引言1.高并发背景互联网行业迅速发展,用户量剧...【详细内容】
2024-03-13    阿里云开发者  Tags:高并发   点击:(6)  评论:(0)  加入收藏
如何判断架构设计的优劣?
架构设计的基本准则是非常重要的,它们指导着我们如何构建可靠、可维护、可测试的系统。下面是这些准则的转换表达方式:简单即美(KISS):KISS原则的核心思想是保持简单。在设计系统...【详细内容】
2024-02-20  二进制跳动  微信公众号  Tags:架构设计   点击:(36)  评论:(0)  加入收藏
详解基于SpringBoot的WebSocket应用开发
在现代Web应用中,实时交互和数据推送的需求日益增长。WebSocket协议作为一种全双工通信协议,允许服务端与客户端之间建立持久性的连接,实现实时、双向的数据传输,极大地提升了用...【详细内容】
2024-01-30  ijunfu  今日头条  Tags:SpringBoot   点击:(19)  评论:(0)  加入收藏
PHP+Go 开发仿简书,实战高并发高可用微服务架构
来百度APP畅享高清图片//下栽のke:chaoxingit.com/2105/PHP和Go语言结合,可以开发出高效且稳定的仿简书应用。在实现高并发和高可用微服务架构时,我们可以采用一些关键技术。首...【详细内容】
2024-01-14  547蓝色星球    Tags:架构   点击:(115)  评论:(0)  加入收藏
GraalVM与Spring Boot 3.0:加速应用性能的完美融合
在2023年,SpringBoot3.0的发布标志着Spring框架对GraalVM的全面支持,这一支持是对Spring技术栈的重要补充。GraalVM是一个高性能的多语言虚拟机,它提供了Ahead-of-Time(AOT)编...【详细内容】
2024-01-11    王建立  Tags:Spring Boot   点击:(124)  评论:(0)  加入收藏
Spring Boot虚拟线程的性能还不如Webflux?
早上看到一篇关于Spring Boot虚拟线程和Webflux性能对比的文章,觉得还不错。内容较长,抓重点给大家介绍一下这篇文章的核心内容,方便大家快速阅读。测试场景作者采用了一个尽可...【详细内容】
2024-01-10  互联网架构小马哥    Tags:Spring Boot   点击:(118)  评论:(0)  加入收藏
站内最新
站内热门
站内头条