一则小故事带你了解HTTP/2的多路复用,加深记忆想忘都难(假的)

写在前面(可跳过)

只看多路复用的概念发现我这个脑子只是看看是不行的,需要用生动形象的例子加深记忆。
如果你也和我一样那么你可以抽出一点时间听我给你讲个小故事。
【通过我自己的理解编的,有不对的地方麻烦路过大佬指正】

来咯

想象你在某当劳里买汉堡,柜台有个点餐员

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连接(三次握手四次挥手,嗯服务态度很好)
点餐员:服务器
我们:浏览器
其他概念文中已大写加粗(没注意?那就再看一遍!

最后

其实想要真正理解还是需要看概念,网上有很多可以自行百度。小故事只是带大家粗略了解或是加深记忆不那么容易忘记。希望我们每学一个知识点都能真正的理解,熟练掌握,把别人那里学来的变成自己的。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值