Vue全家桶 tsql search websocket uiview react脚手架搭建 多店版微信商城 bitlocker加密好慢 hadoop组件 idea批量替换快捷键 python自学入门 python时间戳 python零基础 java基础数据类型 javaforeach java开发者 java时间格式 java列表 linux目录 ie模拟器 狮子狗出装 忧思华光玉攻略 python游戏代码 infopath下载 ps镜头校正 绿幕抠图 免费ftp空间 ipad上市时间 lol无法连接服务器 键盘灯怎么关 启用宏在哪里设置 android计算器 调试工具 dw网页设计教程 笔记本摄像头软件 dnf精灵骑士加点 和彩云是什么 webstorm下载 smtp邮件服务器 win10截屏
当前位置: 首页 > 学习教程  > 编程语言

M3U8 并发下载视频神器,让大家协程的威力有多大

2020/10/8 20:14:36 文章标签:

产生背景:最近身边有位同志说:“你了解M3U8文件???,你能用实现一个下载片儿的神器???”。好家伙!一下就提了两个问题此时我就逐个回答。我还不知道M3U8是什么…

产生背景:最近身边有位同志说:“你了解M3U8文件???,你能用实现一个下载片儿的神器???”。好家伙!一下就提了两个问题此时我就逐个回答。我还不知道M3U8是什么呢,我通过网络知道这是挺流行的网络视频格式。然后那位同志给了我一个网站,我通过“浏览器-》控制台”发现M3U8居然是个文件,然后下面请求出现了很多.ts结尾的视频片段;此时你说用迅雷下载那肯定不现实,然后我就想到用“世界上最好的语言PHP”来做这个事情。然后开始下面这个项目,我已经测试多个网站均无大问题。

产生问题:一个500MB的视频文件,可能拆分出上2000多个视频片段(.ts)那么通过传统同步IO请求方式,肯定效率可想而知;尤其是国外的视频网站,自己网络不好国外服务器不稳定等等因素会导致500MB的分片下载完成,可能需要10分钟以上!!!后来想到这种异步IO,可以采用Swoole 提供的Coroutine来做。

传统同步单进程IO下载速度如下:

任务描述:视频片段1089个文件,大小420MB+,单进程

环境:Swoole:4.5.4, PHP: v7.3.20, Os: Linux, Downloader: v1.0。

结果:单进程同步IO用时6.25分钟,当然这是国内环境,国内服务器稳定的情况。(网站未做并发限制

协程异步IO下载速度如下:

任务描述:视频片段1089个文件,大小420MB+8 进程(8核CPU)90个协程

结果:

测试结果1:多核90个协程用时1.1分钟,当然这是国内环境,国内服务器稳定的情况。

测试结果2:多核心40个协程,用时53秒(注意:协程越多不代表越快,对方服务器未必能承受并发)

测试结果3:多核心200个协程,用时1.23分钟

测试结果4:多核心1000个协程,我租房的宽带爆了,直接失败!!!

结论:

  1. 涉及到IO调度的情况,使用协程并发性能极高。提升效率很明显,但是请记住不是越多越好!!!
  2. 协程数量逐渐上升,下载时间反倒更加长甚至失败!!
  3. 直接总结,Swoole协程是利用多进程填满CPU。
  4. 相信通过上面这些,大家应该也知道协程的魅力了吧!!
  5. 提高网站相应速度,提高服务器并发性能。
  6. 项目已提交到Github,本人已经通过多次测试均无大问题,尽情下片儿!!!
  7. Github:        大家不要吝啬手中的小星星哦~ (这一点比上面都都重要!!!! *3

 

 


本文链接: http://www.dtmao.cc/news_show_250227.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?