产生背景:

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

产生问题:

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

项目截图:

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

传统同步单进程IO如下:

特点:视频片段1089个文件,大小420MB+单进程

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

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

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

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

 

协程异步IO如下:

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

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

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

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

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

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

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

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

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

结论:

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

 

 

 

相关文章:

  • 2022-12-23
  • 2021-09-14
  • 2022-02-17
  • 2021-07-14
  • 2021-10-12
  • 2022-02-10
  • 2021-11-27
  • 2021-08-19
猜你喜欢
  • 2021-11-28
  • 2021-04-28
  • 2021-11-27
  • 2022-01-14
  • 2021-12-03
相关资源
相似解决方案