redis、skynet、nginx、memcached网络模块对比分析
1. 阻塞io、非阻塞io、异步io、同步io、io多路复用;
2. select、epoll精讲;
3. 几种开源框架reactor实现比较;
上课讲师:mark老师
上课时间:2020/12/30 20:00
上课地址:https://ke.qq.com/course/417774?flowToken=1018091
1. 阻塞IO和非阻塞IO的区别在于数据准备阶段是否阻塞,因为数据从内核态拷贝到用户态肯定是阻塞的
四个步骤:
数据没准备好
数据准备好了
数组在内核态
数据在用户态
2. IO多路复用
2.0 解决了什么问题?
帮我们得到可操作的fd,不需要我们一直轮询
2.1 复用什么?复用一个线程
2.2 多路是什么?多个网络请求
3. epoll 水平触发和边缘触发
边缘: 只能用非阻塞IO
3.1 读: 由socket 读缓冲区空转为非空 的时候触发
3.2 写: 写缓冲区满转为不满 的时候触发
水平: 阻塞IO和非阻塞都可以
3.1 读: socket读缓冲区有数据就会通知
3.2 写: socket写缓冲区 有空间写就会触发
nginx: 边缘触发
redis(reactor模型), skynet, memcached: 水平触发
nginx用来做什么?静态web服务器,数据量大,希望把数据及时在用户态就读完减少系统调用
reactor = 非阻塞IO + IO多路复用
redis, skynet是单reactor模型,网络和业务都是在一个线程,不能处理网络密集型业务
nginx是多reactor模型,利用多进程做的
今日和你聊聊RTSP/RTMP推流那些坑
1.推流架构分析
2.推流缓存队列的设计
3.FFmpeg函数阻塞问题分析
上课讲师:darren老师
上课时间:2021/01/05 20:00
上课地址:https://ke.qq.com/course/417774?flowToken=1018091
1. 音视频都需要时间戳, 假如370KB的图片,需要在40ms发出去,带框需要 370 * (1 << 10) * 8 / 0.04 = 70Mb带框
2. 直播服务分为,RTMP协议
2.1 推流
2.2 流媒体缓存
2.3 拉流
3. 假如有延迟,做法
3.1 推流drop数据
3.2 客户端变速或者客户端drop掉非I帧