

Learn and share.



不少同学刚入门编程时,总被 “面向对象”、“函数式” 这些概念绕晕;工作后又遇到 “响应式”、“云原生”、“AI 原生编程”,看着五花八门的编程范式,难免疑惑:“这么多范式到底有啥区别?”“不同场景该选哪种?”
其实编程范式的核心是 “解决问题的思维模式”—— 不同范式对应不同的代码组织逻辑、适用场景,选对了范式,能让开发效率翻倍、系统更易维护。今天就盘点 15 大核心编程范式,从基础到前沿,帮你理清它们的核心逻辑与适用场景。
一、基础核心范式:编程的 “底层思维”
这两类是最基础的编程思维,几乎所有开发者都会接触,也是其他范式的基础:
1. 命令式编程:“一步步告诉计算机怎么做”
核心逻辑:以 “步骤” 为中心,明确描述程序执行的每一个动作,通过改变程序状态实现目标。
典型代表:过程式编程(C、BASIC)、面向对象编程(OOP,Java、C++)、面向切面编程(AOP,Spring AOP)
适用场景:大部分业务系统开发,比如管理系统、APP 后端 ——OOP 的 “封装 / 继承 / 多态” 能让代码更易复用,AOP 则适合处理日志、权限等横切关注点。
2. 声明式编程:“告诉计算机要什么,不用管怎么做”
核心逻辑:聚焦 “结果” 而非 “步骤”,屏蔽底层实现细节,让代码更简洁、专注业务。
典型代表:函数式编程(FP,Haskell、Scala)、逻辑编程(Prolog)、标记式编程(HTML、XML)
适用场景:数据处理、规则推导、结构描述 —— 比如用 FP 处理海量数据(纯函数 + 不可变数据避免副作用),用 HTML 描述页面结构,用 Prolog 做人工智能的规则推导。
二、场景化范式:按 “需求场景” 选对工具
这类范式针对特定开发场景设计,解决某一类具体问题,是实际开发中高频使用的 “专项工具”:
3. 约束 / 契约 / 规则范式:“用规则定义边界”
核心逻辑:通过约束条件、契约条款或规则描述问题,让程序按预设规则运行,减少逻辑漏洞。
典型代表:契约式编程(Eiffel、C# Code Contracts)、面向约束编程(CSP 问题求解)
适用场景:对可靠性要求高的系统,比如金融交易系统(契约式编程的 “前置 / 后置条件” 确保交易安全)、调度系统(面向约束编程自动满足资源限制)。
4. 事件 / 策略 / 插件范式:“灵活应对变化”
核心逻辑:通过 “事件触发”“策略切换”“插件扩展”,让系统适应需求变更,降低耦合。
典型代表:事件驱动编程(GUI、前端)、面向策略编程(算法灵活切换)、面向插件编程(可定制化系统)
适用场景:前端开发(GUI 的点击、输入事件)、电商系统(不同促销策略切换)、工具类软件(动态加载插件扩展功能)。
5. 领域专用 / 特定范式:“为特定领域量身定制”
核心逻辑:针对某一领域的需求,设计专用的编程方式或语言,提升开发效率。
典型代表:领域特定语言(DSL,SQL、Makefile)、面向模式编程(大型项目设计模式复用)
适用场景:数据库操作(SQL 专注数据查询)、构建脚本(Makefile 管理编译流程)、大型项目(用设计模式规范代码结构)。
6. 面向设计 / 架构范式:“搭建系统的骨架”
核心逻辑:从架构层面组织代码,注重解耦、复用和扩展性,支撑大型系统开发。
典型代表:面向接口编程(Java、Go)、面向组件编程(COP,Spring Bean)、面向服务编程(SOP,微服务)
适用场景:分布式系统(微服务架构拆分业务)、大型项目(面向接口编程降低模块依赖)、可复用组件开发(COP 封装独立功能)。
三、进阶技术范式:应对 “复杂场景” 的高级思维
随着技术发展,这类范式针对多核、分布式、大数据等复杂场景而生,是中高级开发者的核心技能:
7. 并发 / 异步 / 分布式范式:“让程序‘多线操作’”
核心逻辑:解决多任务、多核、分布式环境下的协作问题,提升程序运行效率。
典型代表:多线程(Java 线程、Python threading)、Actor 模型(Erlang、Akka)、响应式编程(RxJava、Reactor)、CSP 模型(Go goroutine/channel)
适用场景:高并发系统(电商秒杀)、异步处理(消息推送)、分布式服务(微服务间通信)。
8. 数据 / 状态相关范式:“管好数据与状态”
核心逻辑:优化数据存储、流转和状态管理,适配大数据、高性能计算等场景。
典型代表:面向数据编程(游戏、高性能计算)、数据流编程(Flink、Spark)、面向状态编程(复杂业务逻辑)
适用场景:大数据处理(流式计算实时分析数据)、游戏开发(优化数据访问提升性能)、复杂业务系统(状态机管理状态转换)。
9. 泛型 / 元编程体系:“提升代码复用与灵活性”
核心逻辑:通过 “参数化类型”“程序生成程序”,让代码脱离具体类型限制,或动态生成功能。
典型代表:泛型编程(C++ 模板、Java 泛型)、元编程(C++ 宏、Python 元类)、模板编程(C++ 模板进阶)
适用场景:通用组件开发(泛型编程实现跨类型复用)、动态功能生成(元编程适配不同需求)。
10. 开发 / 测试驱动范式:“保障代码质量与流程规范”
核心逻辑:以测试、文档、配置为核心驱动开发流程,提升代码可靠性和可维护性。
典型代表:面向测试编程(TDD)、面向文档编程、面向配置编程
适用场景:高质量系统开发(TDD 保障代码正确性)、多环境部署(配置驱动适配不同环境)、团队协作项目(文档驱动规范开发流程)。
四、前沿新兴范式:紧跟 “技术趋势” 的未来方向
这些范式随着 AI、云原生、区块链等新技术兴起,是未来开发的重要趋势:
11. 大模型开发范式:“人机协同编程”
核心逻辑:融合 AI 能力,让程序员与 AI 协作开发,提升编程效率。
典型代表:AI 原生编程(新一代编程语言)、提示词驱动开发(PDD,Cursor、Copilot)、面向智能体编程(多智体协作)
适用场景:快速原型开发(AI 生成基础代码)、复杂功能实现(智能体自主协作)、低代码开发(自然语言描述需求生成代码)。
12. 云开发范式:“适配云原生环境”
核心逻辑:面向云基础设施设计,融合容器、编排、微服务等技术,适配云部署场景。
典型代表:云原生编程(K8s、Docker)、面向资源编程(RESTful 架构)、DevOps 原生编程(CI/CD、GitOps)
适用场景:云服务开发(微服务部署在云平台)、API 开发(RESTful 接口设计)、DevOps 流程(开发运维一体化)。
13. 区块链开发范式:“适配区块链特性”
核心逻辑:围绕区块链的 “去中心化、不可篡改” 特性,开发智能合约、分布式应用。
典型代表:智能合约编程(Solidity、Move)、链下协同编程(Layer2、预言机)
适用场景:区块链应用开发(DeFi、NFT)、分布式存证系统(链上存证 + 链下计算)。
14. 量子开发范式:“面向量子计算”
核心逻辑:适配量子计算的 “量子比特” 特性,开发量子算法和应用。
典型代表:量子面向编程(QCL、Silq、Quipper)
适用场景:量子计算相关研究、高性能科学计算(量子算法解决复杂问题)。
15. 安全开发范式:“将安全嵌入开发全流程”
核心逻辑:把安全原则融入代码设计、开发、运维全流程,提前规避安全风险。
典型代表:安全原生编程(Rust、SAST/DAST)、DevSecOps 原生编程(GitLab CI 安全插件)、安全平行切面编程(eBPF)
适用场景:高安全需求系统(金融、政务)、互联网服务(防范黑客攻击)。
总结:编程范式的选择逻辑 ——“场景为王,按需适配”
这么多编程范式,不用追求 “全掌握”,核心是 “按需选择”:
1、做基础业务系统:优先OOP、面向接口编程,兼顾代码复用与维护性;
2、处理高并发/大数据:选响应式编程、数据流编程、CSP模型;
3、搞 AI 相关开发:聚焦提示词驱动、AI 原生编程、面向智能体编程;
4、做云原生/区块链:深耕云原生编程、智能合约编程。
编程范式的本质是 “思维工具”,掌握不同范式,相当于拥有了不同的 “解题思路”。随着技术发展,新的范式还会不断出现,但核心逻辑不变 ——用最适合的方式组织代码,解决具体场景的问题。
你平时最常用哪种编程范式?在实际开发中遇到过哪些 “范式选择” 的困惑?欢迎在评论区留言交流~

面对秒杀活动的瞬时流量、热门 APP 的千万级用户访问,高并发系统的核心诉求只有一个:“稳得住、响应快、不宕机”。高并发处理不是单一技术的比拼,而是从架构设计、存储优化、流量管控到运维保障的全链路协同。今天就拆解高并发处理的核心技术栈,帮你搭建一套 “可扩展、可容错、高性能” 的系统架构。
一、架构设计:从 “单体” 到 “分布式”,破解性能瓶颈
高并发的核心是 “分散压力”,通过分布式架构将流量和负载分摊到多个节点,避免单点故障:
横向扩容与容器化:采用 “横向扩展” 而非 “纵向扩容”,通过增加服务器节点分摊压力;用 Docker 封装应用,K8s 实现容器编排与管理,支持弹性扩缩容(流量高峰自动加节点,低谷缩容节省资源);
微服务与服务治理:拆分单体应用为微服务(如订单、支付、用户服务),每个服务独立部署、按需扩容;通过服务网格、注册中心(ZK、ETCD、Nacos)实现服务发现与路由,搭配限流、降级、熔断机制(避免某个服务故障牵连整体);
无状态设计:服务设计为无状态(不存储本地数据,依赖分布式存储),方便水平扩容;通过 TraceID、SpanID 实现分布式链路追踪,快速定位跨服务问题;
多活与灾备:搭建多数据中心、跨中心数据同步,实现同城 / 异地多活(避免单点数据中心故障);制定全量 / 增量备份策略,确保数据安全与快速恢复。
二、流量管控:削峰填谷,让系统 “从容应对” 高峰
直接暴露核心服务给峰值流量,极易导致系统崩溃,流量管控的核心是 “缓冲、分流、限流”:
负载均衡:通过 Nginx、LVS、F5 等软 / 硬件负载均衡器,将流量均匀分发到后端服务节点;采用一致性 Hash 算法,确保请求分发均匀,减少缓存失效;
消峰填谷:用 MQ 消息队列缓冲瞬时高峰流量(如秒杀订单先入队,服务异步消费),将 “突发流量” 转化为 “平稳流量”,避免服务被压垮;
限流与灰度发布:对核心接口设置限流阈值(如每秒最多处理 1000 请求),超出阈值直接返回友好提示;通过预发布、灰度发布(逐步放量),验证新功能在高并发下的稳定性,降低风险;
DNS 与 CDN 优化:利用 DNS 轮询实现地域级流量分流(将用户导向就近节点);CDN 加速静态资源(图片、视频、JS/CSS),减少源站压力,同时提升用户访问速度。
三、存储优化:适配高并发读写,兼顾速度与可靠性
存储是高并发系统的 “数据底座”,核心需求是 “读写快、容量足、不丢数据”:
分层存储策略:静态资源(图片、视频、大文件)存入分布式存储(HDFS、Ceph 对象存储、块存储),通过 CDN 加速访问;热点数据存入 Redis 等缓存,减少数据库查询压力;
数据库优化:采用分布式数据库、主从架构(主库写、从库读,读写分离);针对高并发场景选用列数据库(适配海量数据查询)、文档数据库(MongoDB,适配非结构化数据);
缓存设计:多级缓存(浏览器缓存→CDN 缓存→服务器端缓存)减少重复请求;合理设置缓存失效时间、失效通知,搭配 LRU 等缓存淘汰算法,避免缓存雪崩、缓存穿透;
资源预分配:提前预热热点数据(如秒杀商品信息载入缓存)、预压制视频 / 图片分辨率,减少高并发时的动态处理压力。
四、核心优化:从代码到硬件,榨干系统性能
在架构和流量管控之外,细节优化能进一步提升系统并发能力,核心是 “减少无效消耗、提升单位时间处理效率”:
硬件与系统优化:选用高性能 CPU、GPU、SSD(提升读写速度);优化操作系统、JVM、网络参数(如调整连接数、内存分配);核心绑定(将进程与 CPU 核心绑定,减少上下文切换);
代码与编程模式优化:简化接口路径、减少参数传递、降低服务依赖(路径短、参数少、依赖少 = 更快响应);采用高效编程模式,避免冗余逻辑和资源浪费;
大数据与算法优化:用 MapReduce、流计算处理海量日志与业务数据,支撑实时决策;核心业务算法优化(如推荐算法采用基于人 / 物品 / 话题的高效匹配逻辑);
多媒体处理优化:对图片、声音、视频进行编解码优化,抽帧处理减少传输与存储压力。
五、运维与监控:实时预警,快速响应问题
高并发系统的稳定性离不开完善的运维监控,核心是 “早发现、早定位、早解决”:
全链路监控:监控性能指标(响应时间、QPS、错误率)、系统资源(CPU、内存、磁盘 IO);建立日志管理平台,集中分析分布式日志,快速定位问题;
自动化运维与预警:通过自动化测试、压力测试,提前验证系统抗并发能力;设置预警阈值(如响应时间超过 500ms 告警),结合服务健康检查,实时发现异常;
容错与补偿:实现重试机制(失败请求自动重试,避免偶发故障影响)、事务补偿(如支付失败自动回滚订单),提升系统容错性;
安全保障:兼顾系统安全与数据安全,防范高并发场景下的恶意攻击(如 DDoS、接口刷取),确保核心业务不被干扰。
总结:高并发处理的核心逻辑 ——“全链路协同,无短板优化”
高并发不是 “某一个技术点的胜利”,而是架构、流量、存储、代码、运维的全方位配合:架构层面 “分散压力”,流量层面 “缓冲分流”,存储层面 “提速减负”,细节层面 “榨干性能”,运维层面 “兜底保障”。
关键原则是 “避免单点故障、减少无效消耗、适配业务场景”—— 比如秒杀场景侧重 “消峰填谷 + 缓存预热”,社交 APP 侧重 “分布式存储 + 实时计算”。只有结合自身业务特点,针对性优化,才能打造出稳定、高效的高并发系统。
你在做高并发系统时,遇到过哪些棘手问题?是缓存雪崩、流量突增还是数据库瓶颈?欢迎在评论区分享你的解决方案~



在我看来,中台并不是整个企业的数据集合,也不是什么具体的技术,甚至也不应该是一个单纯的IT概念。
中台本身应该是一家企业的一种组织架构方式及业务组织形态。在这种组织形态中,借鉴了IT技术中代码或模块复用的概念,实现了各个维度的能力高度整合与复用,而IT只是其中重要的一环,是一种重要的保障手段。
要建立中台,首先要改变的是企业组织架构,以及业务组织形态。干掉各个山头,从整体战略战术上考虑资源投放方式。保证各个业务环节的互联互通,加强能力复用,避免重复建设,实现企业高效运转。这无疑是一个一把手工程。
中台的最终目标,就是业务封装能力。通过将各领域下的通用功能进行封装,可以快速支持新的业务领域和业务模式。而投射到技术上,就是不要重新造轮子,通过复用大量已有服务,快速搭建系统,对新业务进行支持。
而我们说的建中台,最终都应该是业务中台。其他的各种技术类中台,都属于平台的范畴,服务于业务中台。
最近花了一些时间,看了一下OpenResty的东西,感觉用来做API网关的确很赞:
https://github.com/neohope/NeoDemosOpenResty
官网:
https://openresty.org/cn/
本节说明一下遗留的一些内容:
1、开启GPU加速
如果需要GPU加速,除了Intel指定的硬件外,还需要:
https://software.intel.com/en-us/intel-media-server-studio
有社区版,大家感兴趣的可以自己试一下。
2、开启VCA加速
如果需要支持VCA(Intel Visual Compute Accelerator)卡加速,请参考
https://software.intel.com/en-us/webrtc-conference-server-guide-mcu-installation#section2_3_10
3、支持集群
如果需要支持集群,请参考
https://software.intel.com/en-us/webrtc-conference-server-guide-mcu-installation#section2_3_8
咋说呢,总体上感觉这个集群方案有些过于复杂,需要用的时候再看吧。
本节运行一下WebRTC自带的两个Demo。
大家可以解压CS_WebRTC_Client_SDK_JavaScript.v4.1,看一下,里面有两个Demo。
第一个Demo是conference,已经集成到MCU Server里面了,当我们运行bin/start-all.sh命令时,就会启动了。
我们可以通过Chrome访问https://172.16.172.80:3004,就可以看到自己的视频。
再打开一个Chrome访问https://172.16.172.80:3004,就可以看到两路视频合并为一路视频输出了。
由于https证书为自签名,所以浏览器会给出安全提示,将证书加入可信范围,跳过就好了,全部功能只在Chrome成功过。
本节重点看下第二个Demo,是P2P。这个Demo需要两个服务的支持,一个是在第一节我们安装的Peer Server,另一个是需要安装一个turnserver。
1、下载coturn
https://github.com/coturn/coturn/releases
2、安装依赖库
2.1、安装levent
https://sourceforge.net/projects/levent/files/release-2.0.22-stable/
./configure make make install
2.2、安装openssl-devel
sudo yum install openssl openssl-libs openssl-devel
2.3、安装
yum install sqlite-devel
3、编译coturn
./configure make
4、编写coturn配置文件
vi path_to_coturn/bin/urnserver.conf #新增以下内容 listening-device=enp0s3 listening-port=3478 relay-device=enp0s3 min-port=59000 max-port=65000 fingerprint lt-cred-mech use-auth-secret static-auth-secret=demo realm=demo stale-nonce user=demo:demo cert=path_to_coturn/examples/etc/turn_server_cert.pem pkey=path_to_coturn/examples/etc/turn_server_pkey.pem no-loopback-peers no-multicast-peers mobility no-cli
5、启动coturn
cd path_to_coturn/bin sudo ./turnserver
6、启动PeerServer
cd PeerServer-Release-4.1 node peerserver.js
7、编辑本地页面peercall.html的以下部分
var serverAddress='https://172.16.172.80:8096';
const signaling = new SignalingChannel();
let publicationForCamera;
let publicationForScreen;
var p2p = new Ics.P2P.P2PClient({
audioEncodings: true,
videoEncodings: [{codec:{name: 'h264'}}, {codec: {name: 'vp9'}}, {codec: {name: 'vp8'}}],
rtcConfiguration:{
iceServers: [{
urls: "stun:172.16.172.80:3478"
}, {
urls: ["turn:172.16.172.80:3478?transport=udp",
"turn:172.16.172.80:3478?transport=tcp"
],
credential: "demo",
username: "demo"
}]
},
}, signaling);
8、测试
现在用两个Chrome页面浏览本地页面peercall.html,也能使用部分功能,但如果使用全部功能,还是要部署到HTTP服务器的。
9、为了支持Chrome分享桌面,需要安装并配置插件
9.1、修改插件中域名配置
CS_WebRTC_Client_SDK_JavaScript.v4.1\screen-sharing-chrome-extension\manifest.json
"externally_connectable": {
"matches": ["*://172.16.172.80/*", "*://localhost/*"]
},
9.2、打开扩展管理
Chrome->Settings->Entensions
9.3、开启Developer mode
9.4、Load unpacked
选择CS_WebRTC_Client_SDK_JavaScript.v4.1\screen-sharing-chrome-extension
9.5、安装后,会有一个插件ID
我的插件ID为:ongdcdianlnmjiegeandlohjbogjndmc
10、编辑本地页面peercall.html的以下部分
extensionId:'ongdcdianlnmjiegeandlohjbogjndmc'
11、部署网站
将页面部署到你熟悉的HTTP服务器,加入HTTPS证书,并要在HTTP头中允许CORS。
'Access-Control-Allow-Origin', '*'
一个偷懒的办法是,将MCU-Release-v4.1/extras/basic_example复制一份,按规则替换了静态资源。
修改下面几个文件;
package.json修改包描述 quickfix2spdybug47.js删除 samplertcservice.js删除不需要的API,然后修改端口为HTTP4001、HTTPS4004
然后启动了网站。
node samplertcservice.js
12、测试
这样访问https://172.16.172.80:4004即可。
第一个页面,Login左边填写User01,点击登录
第二个页面,Login左边填写User02,点击登录
第一个页面,SetRemoteId为User02
第二个页面,SetRemoteId为User01
第一个页面,SendData数据“123”,第二个页面可以看到。
第一个页面,Share Camera/Share Screen,第二个页面可以看到。
PS:
如果看不到,建议检查以下几件事情
A、必须HTTPS访问
B、Chrom和FF的控制台是否有报错
C、是否证书和HTTPS网站加入了可信列表
D、是否证书和HTTPS的地址是一致的
PS:
如果是Chrome插件有问题,主要确认
A、必须是HTTPS访问
B、网页的Chrome插件ID,与Chrome中插件ID是否一致
C、插件配置中的通配域名,是否与你的域名一致
D、是否证书和HTTPS网站加入了可信列表
E、是否证书和HTTPS的地址是一致的
F、是否打开了开发者模式
13、关闭页面
可以查看PeerServer的日志
本节开始安装MCU Server。
MCU Server有两种工作模式,一种是通过GPU,一种是通过CPU,由于我用的是虚拟机,所以这里用的是CPU。
MCU Server是自带自签名证书的域名与实际域名不匹配,所以大家要生成自己的证书。
1、权限配置
1.1、/etc/security/limits.conf
* hard nproc unlimited * soft nproc unlimited * hard nofile 163840 * soft nofile 163840 * hard stack 1024 * soft stack 1024
1.2、/etc/pam.d/login
session required pam_limits.so
1.3、/etc/security/limits.d/xx-nproc.conf
* hard nproc unlimited * soft nproc unlimited
1.4、/etc/sysctl.conf
fs.file-max=200000 net.core.rmem_max=16777216 net.core.wmem_max=16777216 net.core.rmem_default=16777216 net.core.wmem_default=16777216 net.ipv4.udp_mem=4096 87380 16777216 net.ipv4.tcp_rmem=4096 87380 16777216 net.ipv4.tcp_wmem=4096 65536 16777216 net.ipv4.tcp_mem=8388608 8388608 16777216
1.5、启用设置
sudo /sbin/sysctl -p ulimit -a
2、解压文件
tar -xf CS_WebRTC_Conference_Server_MCU.v4.1.tgz mv Release-v4.1 /neohope/webrtc/MCU-Release-v4.1
3、编译依赖库
3.1、Cisco OpenH264
cd /neohope/webrtc/MCU-Release-v4.1/video_agent #编译并安装依赖库 install_deps.sh #关闭支持 #uninstall_openh264.sh #开启支持 #install_openh264.sh
3.2、ffmpeg with libfdk_aac
cd /neohope/webrtc/MCU-Release-v4.1/audio_agent compile_ffmpeg_with_libfdkaac.sh mv ffmpeg_libfdkaac_lib/* lib/
4、初始化服务
4.1、生成证书
#生成RSA私钥 openssl genrsa -out ryans-key.pem 2048 Generating RSA private key, 2048 bit long modulus ..........................................................+++ ................................................................................ ........................................+++ e is 65537 (0x10001) #生成CSR(certificate signing request) openssl req -new -sha256 -key ryans-key.pem -out ryans-csr.pem You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [XX]:CN State or Province Name (full name) []:SH Locality Name (eg, city) [Default City]:SH Organization Name (eg, company) [Default Company Ltd]:NEOHOPE Organizational Unit Name (eg, section) []:RD Common Name (eg, your name or your server's hostname) []:172.16.172.80 Email Address []:NEOHOPE@YAHOO.COM Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: #生成自签名证书 openssl x509 -req -in ryans-csr.pem -signkey ryans-key.pem -out ryans-cert.pem Signature ok subject=/C=CN/ST=SH/L=SH/O=NEOHOPE/OU=RD/CN=172.16.172.80/emailAddress=NEOHOPE@Y AHOO.COM Getting Private key #转换为p12格式 #openssl pkcs12 -export -in ryans-cert.pem -inkey ryans-key.pem -certfile ca-cert.pem -out ryans.pfx openssl pkcs12 -export -in ryans-cert.pem -inkey ryans-key.pem -out ryans.pfx Enter Export Password: Verifying - Enter Export Password:
4.2、安装证书
cp ryans.pfx ../MCU-Release-v4.1/extras/basic_example/cert/certificate.pfx cp ryans.pfx ../MCU-Release-v4.1/portal/cert/certificate.pfx #cp ryans.pfx ../MCU-Release-v4.1/webrtc_agent/cert/certificate.pfx cp ryans.pfx ../MCU-Release-v4.1/management_console/cert/certificate.pfx #然后分别到basic_example、portal、management_console下面,执行 node initcert.js
5、初始化服务
#非GPU加速 bin/init-all.sh #GPU加速 #bin/init-all.sh --hardware
6、开启服务
bin/start-all.sh
starting nuve, stdout -> /home/neohope/webrtc/MCU-Release-v4.1/logs/woogeen-nuve.stdout
starting cluster-manager, stdout -> /home/neohope/webrtc/MCU-Release-v4.1/logs/woogeen-cluster-manager.stdout
starting audio-agent, stdout -> /home/neohope/webrtc/MCU-Release-v4.1/logs/woogeen-audio-agent.stdout
starting conference-agent, stdout -> /home/neohope/webrtc/MCU-Release-v4.1/logs/woogeen-conference-agent.stdout
2018-10-11 00:24:30.336 - INFO: AmqpClient - Connecting to rabbitMQ server OK, hostPort: { host: 'localhost', port: 5672 }
2018-10-11 00:24:30.366 - INFO: ErizoAgent - conference agent join cluster ok.
2018-10-11 00:24:30.415 - INFO: ClusterWorker - Join cluster woogeen-cluster OK.
2018-10-11 00:24:30.429 - INFO: ErizoAgent - as rpc server ok.
2018-10-11 00:24:30.431 - INFO: ErizoAgent - as monitoring target ok.
starting recording-agent, stdout -> /home/neohope/webrtc/MCU-Release-v4.1/logs/woogeen-recording-agent.stdout
2018-10-11 00:24:32.547 - INFO: AmqpClient - Connecting to rabbitMQ server OK, hostPort: { host: 'localhost', port: 5672 }
starting sip-agent, stdout -> /home/neohope/webrtc/MCU-Release-v4.1/logs/woogeen-sip-agent.stdout
2018-10-11 00:24:33.886 - INFO: AmqpClient - Connecting to rabbitMQ server OK, hostPort: { host: 'localhost', port: 5672 }
2018-10-11 00:24:33.914 - INFO: ErizoAgent - sip agent join cluster ok.
2018-10-11 00:24:33.961 - INFO: ClusterWorker - Join cluster woogeen-cluster OK.
2018-10-11 00:24:33.970 - INFO: ErizoAgent - as rpc server ok.
2018-10-11 00:24:33.973 - INFO: ErizoAgent - as monitoring target ok.
starting streaming-agent, stdout -> /home/neohope/webrtc/MCU-Release-v4.1/logs/woogeen-streaming-agent.stdout
2018-10-11 00:24:35.160 - INFO: AmqpClient - Connecting to rabbitMQ server OK, hostPort: { host: 'localhost', port: 5672 }
2018-10-11 00:24:35.187 - INFO: ErizoAgent - streaming agent join cluster ok.
2018-10-11 00:24:35.235 - INFO: ClusterWorker - Join cluster woogeen-cluster OK.
2018-10-11 00:24:35.246 - INFO: ErizoAgent - as rpc server ok.
2018-10-11 00:24:35.262 - INFO: ErizoAgent - as monitoring target ok.
starting video-agent, stdout -> /home/neohope/webrtc/MCU-Release-v4.1/logs/woogeen-video-agent.stdout
2018-10-11 00:24:36.529 - INFO: AmqpClient - Connecting to rabbitMQ server OK, hostPort: { host: 'localhost', port: 5672 }
2018-10-11 00:24:36.563 - INFO: ErizoAgent - video agent join cluster ok.
2018-10-11 00:24:36.603 - INFO: ClusterWorker - Join cluster woogeen-cluster OK.
2018-10-11 00:24:36.616 - INFO: ErizoAgent - as rpc server ok.
2018-10-11 00:24:36.631 - INFO: ErizoAgent - as monitoring target ok.
starting webrtc-agent, stdout -> /home/neohope/webrtc/MCU-Release-v4.1/logs/woogeen-webrtc-agent.stdout
2018-10-11 00:24:37.938 - INFO: AmqpClient - Connecting to rabbitMQ server OK, hostPort: { host: 'localhost', port: 5672 }
2018-10-11 00:24:37.964 - INFO: ErizoAgent - webrtc agent join cluster ok.
2018-10-11 00:24:37.999 - INFO: ClusterWorker - Join cluster woogeen-cluster OK.
2018-10-11 00:24:38.020 - INFO: ErizoAgent - as rpc server ok.
2018-10-11 00:24:38.024 - INFO: ErizoAgent - as monitoring target ok.
starting management-console, stdout -> /home/neohope/webrtc/MCU-Release-v4.1/logs/woogeen-management-console.stdout
Start management-console HTTP server
starting portal, stdout -> /home/neohope/webrtc/MCU-Release-v4.1/logs/woogeen-portal.stdout
2018-10-11 00:24:40.691 - INFO: AmqpClient - Connecting to rabbitMQ server OK, hostPort: { host: 'localhost', port: 5672 }
2018-10-11 00:24:40.715 - INFO: Main - portal initializing as rpc client ok
2018-10-11 00:24:40.733 - INFO: Main - portal join cluster ok, with rpcID: portal-089f86b5d0a4c156d6b5@172.16.172.80
2018-10-11 00:24:40.734 - INFO: ClusterWorker - Join cluster woogeen-cluster OK.
2018-10-11 00:24:40.741 - INFO: Main - portal initializing as rpc server ok
2018-10-11 00:24:40.748 - INFO: Main - portal-089f86b5d0a4c156d6b5@172.16.172.80 as monitor ready
starting sip-portal, stdout -> /home/neohope/webrtc/MCU-Release-v4.1/logs/woogeen-sip-portal.stdout
starting app, stdout -> /home/neohope/webrtc/MCU-Release-v4.1/logs/woogeen-app.stdout
7、测试服务,访问地址
7.1、你可以用浏览器浏览这个页面,可以看到自己的输入和输出视频画面
https://172.16.172.80:3004/
7.2、你可以用多个浏览器浏览这个页面,可以看到多路视频被合并为一个视频画面了。
https://172.16.172.80:3004/
7.3、如果不想合并多路视频,而是直接获取单个视频,可以用这个链接
https://172.16.172.80:3004/?forward=true
7.4、你可以用这个URL加入某个视频会议的房间
https://172.16.172.80:3004/?room=root_id
房间ID,在启动时,会输出到命令行及日志。
7.5、可以进入管理页面
https://172.16.172.80:3300/console/
需要输入Service_ID及Service_KEY。
可以在MCU-Release-v4.1/extras/basic_example/samplertcservice.js,查找这行代码即可得到:
icsREST.API.init('_service_ID_', '_service_KEY_', 'http://localhost:3000/', true);
8、停止服务
bin/stop-all.sh stopping nuve stopping cluster-manager stopping audio-agent stopping conference-agent stopping recording-agent stopping sip-agent stopping streaming-agent stopping video-agent stopping webrtc-agent stopping management-console stopping portal. stopping sip-portal stopping app