HTTP1.1 Keep-Alive到底算不算长连接?

✎ 码甲说  

      在基础架构部浸润了半年,有一些认知刷新想和童靴们交代一下, 不一定全面,仅代表此时的认知, 也欢迎筒靴们提出看法。

本文聊一聊口嗨用语:“长连接、短连接”, 文章会按照下面的思维导图来讲述:

d0d6973e64c4a6f19b984ecf174b5f4e.png

重点围绕这两个难点/思维误区来整理知识体系。

  • 长连接 vs 短连接

  • Http1.1持久连接 vs  WebSocket长连接

8a127aae48980c29e607b9f72e9d553a.png

长连接 vs 短连接

长连接是指一个连接上连续发送多个数据包。

短连接是指双方要数据交互时,建立一个连接,数据发送完毕,则断开连接,即每次连接只完成一个单元的业务传输,有需要再建立新连接传输数据。

实际上长短连接都是针对TCP连接而言的,强调的是应用层对下层TCP连接的使用姿势,采用哪种连接由应用根据自身情况决定。

长连接多用于操作频繁、点对点的通信,而且连接数不能太多的情况。每次TCP连接都需要三次握手,这需要时间,如果每个操作都是短连接,再操作的话那么处理速度会降低很多,所以每次操作完后都不断开,下次处理时直接发送数据包就OK了,不用建立TCP连接。例如:数据库的连接用长连接,如果用短连接频繁的通信会造成socket错误,而且频繁的socket 创建也是对资源的浪费。

而常规web网站一般都是短连接,这是由web站点的特征决定,web站点的客户端数量大、访问时间/频次不固定,采用短连接能节省服务器资源;如果客户端都维持长连接,可想而知,会占用多大的服务器资源, 所以并发量大,但每个用户无需频繁操作的时候使用短连接较好。

eb6656f87ba9ebcd89799550f0b374c4.png

HTTP1.1 持久连接

早期HTTP1.0是纯粹的TCP短连接的应用,每个连接完成一次Http请求/响应模型,这种方式频繁的创建/销毁连接无疑是有一定性能损耗的。

目前普遍应用的HTTP1.1的Keep-alive官方术语上叫持久连接(英语:HTTP persistent connection,也称作HTTP connection reuse),国内口嗨称为“HTTP长连接”。

HTTP1.1keep-alive,我认为是应用层HTTP协议对于TCP连接的折中使用,是应用层对下层TCP连接的复用协商

  • Http1.0 频繁创建/销毁连接确实给通信双方带来了不必要的性能损耗  #不必要#

  • 直接使用典型的长连接又会给服务端带来极大的压力  #不允许#

故HTTP1.1的keep-alive一方面允许多个HTTP请求复用一个TCP连接, 另一方面又将这种复用时效交由客户端/服务端在应用层协商:应用层每次请求/响应均携带Connection:Keep-Alive标头滑动续约

HTTP 1.1 Keep-Alive的实质是应用层滑动续约复用TCP连接?51f52565e6f77b947f4eabf03df85efe.gif

大家不妨回想一下,常见的各种客户端/服务器,均有KeepAliveTimeout这样的参数

  1. 客户端IE默认的KeepAliveTimeout是1分钟[1]

  2. 服务器IIS默认ConnectionTimeout时长是2min[2]

  3. 服务器ASP.NetCore Kestrel默认的KeepAliveTimeout=130s[3]

  4. 服务器nginx默认的keepalive_timeout=60s[4]

这些参数均能印证 HTTP Keep-Alive 是一种对于TCP连接的滑动续约复用。

这里面明眼人一看,1.2.4针对TCP Connection复用的滑动超时时间是拍脑袋决定的,而第3点ASP.NET Core Kestrel作为.NETCore的寄宿服务器为什么是130s,有点意思,我给你们找出相关: KestrelServerLimits.KeepAliveTimeout=130s[5]

ee796684c6d8e54098f471f4c6bc09b7.png

典型的长连接Websocket

Websocket是一种典型的长连接,通过第一个HTTP Request建立了TCP连接之后,之后数据交互都不需要发送HTTP Request了,但是不需要发送 HTTP header就能交换数据显然和原有的 HTTP 协议是有区别的,所以它需要对服务器和客户端都进行升级才能实现,这个协商是在Websocket数据传输之前就已经完成:通过初次HTTP建立TCP连接的时候携带Upgrade标头来通知双方提升协议。

Websocket也有keepalive机制,Websocket的keepalive的作用是在复杂的网络环境中探测连接对端是否还存活。

fe621142d46ef58cf88f93c992dec55c.png

旁白总结

  1. 长短连接都是针对TCP连接而言,强调的是应用层对于TCP连接的使用姿势。

  2. HTTP1.1 Keep-Alive是对TCP连接的折中使用,既不是短连接,也不能称为典型的长连接。

  3. HTTP1.1 Keep-Alive官方称持久连接,我的观点是HTTP1.1 Keep-Alive 是在应用层对TCP连接进行滑动续约复用。

  4. 典型的长连接Websocket在数据传输之前就完成了长连接确认。

             文章某些观点可能让一些童鞋不适,欢迎表明态度,理性讨论!!!

参考资料

[1]

IE默认的KeepAliveTimeout是1分钟: https://docs.microsoft.com/en-US/troubleshoot/browsers/change-keep-alive-time-out

[2]

IIS默认ConnectionTimeout时长2min: https://docs.microsoft.com/en-us/previous-versions/iis/6.0-sdk/ms525597

[3]

ASP.Net Core Kestrel默认的KeepAliveTimeout=130s: https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.server.kestrel.core.kestrelserverlimits.keepalivetimeout?view=aspnetcore-6.0#Microsoft_AspNetCore_Server_Kestrel_Core_KestrelServerLimits_KeepAliveTimeout

[4]

nginx默认的keepalive_timeout=60s: http://nginx.org/en/docs/http/ngx_http_upstream_module.html#keepalive_timeout

[5]

KestrelServerLimits.KeepAliveTimeout=130s: https://github.com/dotnet/runtime/issues/52267

48b3d914e3e42e9c018a2aa84611a392.png

点个在看你最好看

56e5bd5cf258a56327281b1f7937f83e.png

仅代表此刻认知,文章永久更新地址,请移步原文!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/295223.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

rabbitmq学习:

消息队列(消息中间件)常见的有三种:RabbitMQ、ActiveMQ、ZeroMQ 这里要说的是RabbitMQ。 需要明确的几个概念: Broker: 翻译为中文应该是“经纪人”、“中间人”吧,就是指RbbitMQ服务本身 vhost: 虚拟主机,…

磁盘与目录的容量(转)

磁盘与目录的容量 现在我们知道磁盘的整体数据是在 superblock 区块中,但是每个各别文件的容量则在 inode 当中记载的。 那在文字接口底下该如何叫出这几个数据呢?底下就让我们来谈一谈这两个命令: df:列出文件系统的整体磁盘使用…

酸了!第一名+第三名的学霸情侣,分别直博清华、人大…

全世界只有3.14 % 的人关注了爆炸吧知识本文授权转载自公众号:学术志(ID:xueshuzhi001)作者:青小小(ID:zqwqxx)综合自武汉大学在武汉大学数学与统计学院2017级数学基地班第一名和第三…

UVA10972 - RevolC FaeLoN(双连通分量)

题目链接 题意: 给定一个无向图,问最少加入多少条边,使得这个图成为连通图 思路:首先注意题目给出的无向图可能是非连通的,即存在孤立点。处理孤立点之后。其它就能够当作连通块来处理。事实上跟POJ3352非常像&#xf…

php返回一个变量,PHP从另一个文件获取变量

有许多不同的方法可以做到这个,我会和你分享2。INCLUDE可以在事实上include()它使用第三文件,但我不建议作为会议是容易得多。但是,如果你想要一个配置类型文件,这也很有用。顶部的login.php的:include(global.php);新…

如何解决Android studio已分享到github的项目但是git->commit directory提交不上去

今天在android studio里面分享了一个项目到github,打算开发一个Android各种框架,控件,或者特效的对比应用和分析,然后对相关功能进行扩展,如果感兴趣的小伙伴想把Android里面相关框架,控件,特效什么进行对比应用和总结并扩展,那么请猛戳这里吧,https://github.com/chan…

分析cocos2d-x中的CrystalCraze示例游戏

cocos2d-x自带了不少示例,以及几个比较简单的游戏,不过这些游戏都是用javascript binding(SpiderMonkey)做的,所以我猜测javascript binding可能是cocos2d-x开发游戏的主流模式,优点是: 游戏逻辑用javascript&#xff…

WPF 实现一个酷酷的Loading

WPF开发者QQ群: 340500857 | 微信群 -> 进入公众号主页 加入组织由于微信群人数太多入群请添加小编微信号(yanjinhuawechat)或(W_Feng_aiQ)邀请入群(需备注WPF开发者)PS:有更好的…

DNS区域委派与转发

DNS区域委派与转发 DNS 是域名系统 (Domain Name System) 的缩写,该系统用于命名组织到域层次结构中的计算机和网络服务。在Internet上域名与IP地址之间是一一对应的,域名虽然便于人们记忆,但机器之间只能互相认识IP地址,它们之间…

惊了!哆啦A梦里最能打的道具,居然真实存在!还打破了世界纪录,看完跪了....

全世界只有3.14 % 的人关注了爆炸吧知识生活处处有科学《哆啦A梦》里的空气炮,是很多人童年时梦寐以求的神奇道具。只要将手伸进炮筒,就能发出强大的压缩空气炮,瞬间击倒体型庞大的怪物。为了证明“空气炮”的确有科学依据,有这么…

看科普片随感

很多专业知识的科普片为什么能够让没有专业知识背景的人也能够看懂、并且印象深刻? 粗略总结以下4点。 1、图、文、动画并茂。 2、讲故事、“平民化“。 3、用生活中的场景映衬一些专业知识。 4、把复杂的东西简单化。 如果我们传播一些专业知识的时候也能做到这样&…

service zookeeper does not support chkconfig解决办法

一 问题描述部署好ZooKeeper后,需要设置启动脚本并设置开机自动启动。cp /opt/app/zookeeper/bin/zkServer.sh /etc/init.d/zookeeper更改脚本的参数ZOOBIN/opt/app/zookeeper/binZOOBINDIR/opt/app/zookeeper/binZOO_LOG_DIR/opt/logs/zookeeper这个三个参数随意自…

Android之如何解决Android Studio左边的的project不见了

今早上一打开Android studio,尼玛,我的project跑哪里去了,郁闷了,如下图 本来是要去问我师傅的,但是一想这么简单的问题也去问,弱爆了,如果在网上找不到解决问题的办法再去问吧,果然找到了&…

Win11推送加速!

微软宣布 Windows 11 现已开始向更多符合条件的 Windows 10 电脑推送。微软表示:无论是推广经验还是用户反馈,都是积极的。因此我们计划扩大 Windows 11 的推送范围,这比我们之前预期的要快。如果您有符合升级条件的 Windows 10 电脑&#xf…

h5通过php微信支付宝支付,用H5调用支付微信公众号支付的解析

这篇文章主要为大家详细介绍了微信公众号支付H5调用支付,具有一定的参考价值,感兴趣的小伙伴们可以参考一下最近项目需要微信支付,然后看了下微信公众号支付,虽然不难,但是细节还是需要注意的,用了大半天时间写了个dem…

菜鸟小编对云计算的一点猜想

尊敬的51cto会员,大家好,我是【文德数据】的90小编小宇: 刚刚浏览了好长时间的云计算资料,对它有所了解,不知道大家有没有发现其实云计算只是一种假想的东西。 猜测1.IDC和云计算关系密切。 首先&#xff0…

这场戏里,到底是谁脏了?

1 让我表演个背包袱!▼2 猝不及防的劈叉(素材来源网络,侵删)▼3 就很出戏(素材来源网络,侵删)▼4 意识流拔河很有感觉了▼5 纯爱(素材来源网络,侵删)▼6 …

Android之如何解决刚下载的Android studio(包括上面的菜单栏)乱码问题

这个问题是我的台式机第一次下载Andorid studio的时候出现的,这台台式机组装的,是之前玩ps的人用了的,感觉怪怪的,第一次安装Android studio不是很熟悉,出现了乱码,包括菜单栏目,只有部分图片了,没有全部图片了 解决这个问题的总共思路: 思路一: 请教了那…

关于高级导数的一个不等式估计

from: http://math.fudan.edu.cn/gdsx/XXYD.HTM

sqlserver2008 创建支持文件流的数据库

第一步打开sqlserver数据库filestream特性How to: Enable FILESTREAM(12个步骤)Before you can start to use FILESTREAM, you must enable FILESTREAM on the instance of the SQL Server Database Engine. This topic describes how to enable FILESTR…