一則小故事帶你瞭解HTTP/2的多路複用,加深記憶想忘都難(假的)

寫在前面(可跳過)

只看多路複用的概念發現我這個腦子只是看看是不行的,須要用生動形象的例子加深記憶。
若是你也和我同樣那麼你能夠抽出一點時間聽我給你講個小故事。
【經過我本身的理解編的,有不對的地方麻煩路過大佬指正】web

來咯

想象你在某當勞裏買漢堡,櫃檯有個點餐員瀏覽器

HTTP/1.0版本

點餐員只能記住你點同樣東西。
你想吃漢堡、薯條、雞米花,你須要和點餐員說我要吃漢堡(stop,再多說點餐員記不住了(;д;)),而後點餐員去給你拿漢堡,把漢堡交給你,點餐結束。
你說點餐員我還要薯條,點餐員重複上述步驟,點餐結束。
你說點餐員我還要雞米花,依舊重複...
...
這實在是太麻煩了,若是我須要點個公司團餐,我須要不停地點餐。
! 這個時候,一個叫keep-alive的記事本出現了
點餐的時候帶着keep-alive記事本,把你想點的東西全都寫上去給點餐員看,點餐員就能一次記住多樣東西了
可是你每次點餐都要帶着keep-alive記事本,這仍是有點麻煩服務器

HTTP/1.1版本

這個版本的點餐員自備了keep-alive記事本,當你去點餐的時候你能夠兩手空空的就去了。設想兩個場景編輯器

  1. 你想吃超豪華漢堡,哦還要一瓶水,因而點餐員在記事本上寫着超豪華漢堡、一瓶礦泉水。
    超豪華漢堡工序複雜,可能須要一陣子才能作完。你都快渴死了,點餐員也不給你水而是和你面面相覷...
    ...(點餐員說我也沒辦法我這個記事本是無序的,我怕搞亂,仍是等着吧(。•́︿•̀。))
    嗯,真的要渴死了!好氣
    (若是你的同事們又給你打電話說你再來兩單,其中一單是一份薯條,一份雞米花,一個冰淇淋;另外一單是...由於你的漢堡仍是沒有作完,這個時候又來兩單,都得等着,這稱爲 隊頭阻塞
  2. 假如設定顧客們最大的點餐數,好比60,咱們點6單。由於點餐員一共能夠處理60個,這樣每單最多能夠點10個吃的。
    當你的記事本上密密麻麻寫了20個想要點的東西時,點餐員只能給你處理10個,剩下的只能將前面點的處理完才能處理。
    雖然你很崩潰可是點餐員也表示無能爲力!

HTTP/2版本

鑑於前幾個版本的用戶體驗一直不是很好,因而多路複用出現了。
多路複用是什麼?
是爲了解決前面那些麻煩狀況優化

  1. 你想吃烤翅、超豪華漢堡、一瓶礦泉水。前兩個製做過程緩慢,因而點餐員不在窗口等它們,而是去冷藏櫃裏給你拿了一瓶礦泉水,用幀(用來標記順序的標識, 二進制幀)給你的礦泉水瓶標記一個3,而後再回窗口等別的。以後烤翅烤好了,點餐員給了你烤翅順便用幀給你的烤翅袋上標記了一個1,緊接着漢堡也作好了,點餐員給了你一個帶着2的漢堡。
    ! 過程當中你的同事們給你打電話叫你再下兩單給他們帶着,點餐員也會在過程當中儘快給你拿到已經作好的吃的。由於幀標記了你的單號、點餐順序,即便不是按順序出餐你也不會搞亂,固然點餐員也不會搞亂(二進制幀組成了 ,以保證順序不會亂)。
  2. 由於上面這種優化使得你點了20個想吃的東西,由於點餐員有幀進行順序標識,根本不用等!由於假設限定了顧客最多點60個,如今點餐員能夠單單處理60個,下6單就是處理360個!比原來的效率提高了六倍! <(▰˘◡˘▰)>
    這就是多路複用

解釋

點餐:一個HTTP鏈接(三次握手四次揮手,嗯服務態度很好)
點餐員:服務器
咱們:瀏覽器
其餘概念文中已大寫加粗(沒注意?那就再看一遍!spa

最後

其實想要真正理解仍是須要看概念,網上有不少能夠自行百度。小故事只是帶你們粗略瞭解或是加深記憶不那麼容易忘記。但願咱們每學一個知識點都能真正的理解,熟練掌握,把別人那裏學來的變成本身的。orm

本文使用 mdnice 排版ci

相關文章
相關標籤/搜索