M3U8 併發下載視訊神器,讓大家協程的威力有多大
阿新 • • 發佈:2020-10-09
產生背景:
最近身邊有位同志說:“你瞭解M3U8檔案???,你能用實現一個下載片兒的神器???”。好傢伙!一下就提了兩個問題此時我就逐個回答。我還不知道M3U8是什麼呢,我通過網路知道這是挺流行的網路視訊格式。然後那位同志給了我一個網站,我通過“瀏覽器-》控制檯”發現M3U8居然是個檔案,然後下面請求出現了很多.ts結尾的視訊片段;此時你說用迅雷下載那肯定不現實,然後我就想到用“世界上最好的語言PHP”來做這個事情。然後開始下面這個專案,我已經測試多個網站均無大問題。
產生問題:
一個500MB的視訊檔案,可能拆分出上2000多個視訊片段(.ts)。那麼通過傳統同步IO請求方式,肯定效率可想而知;尤其是國外的視訊網站,
專案截圖:
傳統同步單程序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個協程,我租房的寬頻爆了,直接失敗!!!
結論:
- 涉及到IO排程的情況,使用協程併發效能極高。提升效率很明顯,但是請記住不是越多越好!!!
- 協程數量逐漸上升,下載時間反倒更加長甚至失敗!!
- 直接總結,Swoole協程是利用多程序填滿CPU。
- 相信通過上面這些,大家應該也知道協程的魅力了吧!!
- 提高網站響應速度,伺服器併發效能。
- 專案已提交到Github,本人已經通過多次測試均無大問題,盡情下片兒!!!
- Github:https://github.com/twomiao/Downloader-M3U8.git
- 第7點比前面所有重要!!!大家不要吝嗇手中的小星星哦~