(转)HTTP 长连接和短连接

1. HTTP协议与TCP/IP协议的关系

HTTP的长连接和短连接本质上是TCP长连接和短连接。HTTP属于应用层协议,在传输层使用TCP协议,在网络层使用IP协议。IP协议主要解决网络路由和寻址问题,TCP协议主要解决如何在IP层之上可靠的传递数据包,使在网络上的另一端收到发端发出的所有包,并且顺序与发出顺序一致。TCP有可靠,面向连接的特点。

 

2. 如何理解HTTP协议是无状态的

HTTP协议是无状态的,指的是协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。也就是说,打开一个服务器上的网页和你之前打开这个服务器上的网页之间没有任何联系。HTTP是一个无状态的面向连接的协议,无状态不代表HTTP不能保持TCP连接,更不能代表HTTP使用的是UDP协议(无连接)。

 

3. 什么是长连接、短连接?

在HTTP/1.0中,默认使用的是短连接。也就是说,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。如果客户端浏览器访问的某个HTML或其他类型的 Web页中包含有其他的Web资源,如JavaScript文件、图像文件、CSS文件等;当浏览器每遇到这样一个Web资源,就会建立一个HTTP会话。

但从 HTTP/1.1起,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,会在响应头有加入这行代码:

Connection:keep-alive

在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的 TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接要客户端和服务端都支持长连接。

HTTP协议的长连接和短连接,实质上是TCP协议的长连接和短连接。

3.1 TCP连接

当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接 时它们可以释放这个连接,连接的建立是需要三次握手的,而释放则需要4次握手,所以说每个连接的建立都是需要资源消耗和时间消耗的

经典的三次握手示意图:

经典的四次握手关闭图:

3.2 TCP短连接

我们模拟一下TCP短连接的情况,client向server发起连接请求,server接到请求,然后双方建立连接。client向server 发送消息,server回应client,然后一次读写就完成了,这时候双方任何一个都可以发起close操作,不过一般都是client先发起 close操作。为什么呢,一般的server不会回复完client后立即关闭连接的,当然不排除有特殊的情况。从上面的描述看,短连接一般只会在 client/server间传递一次读写操作

短连接的优点是:管理起来比较简单,存在的连接都是有用的连接,不需要额外的控制手段

3.3 TCP长连接

接下来我们再模拟一下长连接的情况,client向server发起连接,server接受client连接,双方建立连接。Client与server完成一次读写之后,它们之间的连接并不会主动关闭,后续的读写操作会继续使用这个连接。

首先说一下TCP/IP详解上讲到的TCP保活功能,保活功能主要为服务器应用提供,服务器应用希望知道客户主机是否崩溃,从而可以代表客户使用资源。如果客户已经消失,使得服务器上保留一个半开放的连接,而服务器又在等待来自客户端的数据,则服务器将应远等待客户端的数据,保活功能就是试图在服务 器端检测到这种半开放的连接。

如果一个给定的连接在两小时内没有任何的动作,则服务器就向客户发一个探测报文段,客户主机必须处于以下4个状态之一:

  1. 客户主机依然正常运行,并从服务器可达。客户的TCP响应正常,而服务器也知道对方是正常的,服务器在两小时后将保活定时器复位。
  2. 客户主机已经崩溃,并且关闭或者正在重新启动。在任何一种情况下,客户的TCP都没有响应。服务端将不能收到对探测的响应,并在75秒后超时。服务器总共发送10个这样的探测 ,每个间隔75秒。如果服务器没有收到一个响应,它就认为客户主机已经关闭并终止连接。
  3. 客户主机崩溃并已经重新启动。服务器将收到一个对其保活探测的响应,这个响应是一个复位,使得服务器终止这个连接。
  4. 客户机正常运行,但是服务器不可达,这种情况与2类似,TCP能发现的就是没有收到探查的响应。

 

3.4 长连接短连接操作过程

短连接的操作步骤是:

建立连接——数据传输——关闭连接…建立连接——数据传输——关闭连接

长连接的操作步骤是:

建立连接——数据传输…(保持连接)…数据传输——关闭连接

 

4. 长连接和短连接的优点和缺点

由上可以看出,长连接可以省去较多的TCP建立和关闭的操作,减少浪费,节约时间。对于频繁请求资源的客户来说,较适用长连接。不过这里存在一个问题存活功能的探测周期太长,还有就是它只是探测TCP连接的存活,属于比较斯文的做法,遇到恶意的连接时,保活功能就不够使了。在长连接的应用场景下,client端一般不会主动关闭它们之间的连接,Client与server之间的连接如果一直不关闭的话,会存在一个问题,随着客户端连接越来越多,server早晚有扛不住的时候,这时候server端需要采取一些策略,如关闭一些长时间没有读写事件发生的连接,这样可 以避免一些恶意连接导致server端服务受损;如果条件再允许就可以以客户端机器为颗粒度,限制每个客户端的最大长连接数,这样可以完全避免某个蛋疼的客户端连累后端服务。

短连接对于服务器来说管理较为简单,存在的连接都是有用的连接,不需要额外的控制手段。但如果客户请求频繁,将在TCP的建立和关闭操作上浪费时间和带宽

长连接和短连接的产生在于client和server采取的关闭策略,具体的应用场景采用具体的策略,没有十全十美的选择,只有合适的选择。

 

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

而像WEB网站的http服务一般都用短链接,因为长连接对于服务端来说会耗费一定的资源,而像WEB网站这么频繁的成千上万甚至上亿客户端的连接用短连接会更省一些资源,如果用长连接,而且同时有成千上万的用户,如果每个用户都占用一个连接的话,那可想而知吧。所以并发量大,但每个用户无需频繁操作情况下需用短连好。

转载于:https://www.cnblogs.com/vinplezhang/p/6186233.html

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

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

相关文章

ddr4服务器内存频率_金士顿DDR4-3200服务器内存通过完整测试

全面支持第二代AMD EPYC处理器2019年8月13日北京讯,全球存储领袖金士顿今天宣布旗下Server Premier系列DDR4-3200 Registered DIMMs内存将支持第二代AMD EPYC™服务器处理器。最新款金士顿Server Premier内存频率高达3200MT/s,提供8GB、16GB和32GB三种容…

html 链接section,HTML section 标签

HTML 标签是HTML5新增的语义化标签之一。关于语义化标签的概念与作用可以参阅HTML 语义化布局概述一章节。**一.标签作用:**此标签的功能与标签比较类似,两者联系与区别简单总结如下:(1).可以认为是特殊。(2).更加强调独立性,语义…

中美科技成果转化比较分析

来源:创新研究近年来随着国家在不断加大科技投入,以及专利成果数量的快速增长,全社会对科技创新关注程度不断提高,对我国科技成果转化率低的批评不断增加,有文章指出“我国科技成果的转化率仅有10%,比美国8…

bh1750采集流程图_重大更新:STM32空气监测仪,OneNET物联网平台实时查看(原理图、PCB源文件、程序源码等)...

更新内容:一、SD卡记录功能。自动识别有无SD卡,支持4G以下SD卡。下图为SD卡记录的数据。以日期为文件名自动创建文件。记录格式为:时间,PM1.0,PM2.5,PM10,温度,湿度,大气…

商用计算机低温工作,突破量子计算机瓶颈!超低温芯片能在接近绝对零度的温度下工作...

如何克服量子计算机运转时产生的超高热量仍是量子计算机研究当中的一大难题。日前,科学家开发出一种新型的低温计算机芯片,能够在接近绝对零度的理论温度极限下工作。这种名为 Gooseberry 的低温系统为量子计算领域的革命奠定了基础——使新一代机器能够…

python自动化测试开发_基于python的selenium2自动化测试从基础到实战(Python3、selenium2、自动化测试、web测试)...

Selenium2是目前比较流行的一款针对web页面测试的自动化测试工具,他的前身是Selenium 。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE、Mozilla Firefox、Mozilla Suite等。但是目前使用Selenium2做测试的基本是采用ja…

虚拟机安装CentOS6.4

1 概述 虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统,运行在主机上,完全独立,虚拟机里面的所有操作不会影响主机,即使虚拟机崩溃了&#x…

中国人工智能产业白皮书

来源:北京物联网智能技术应用协会未来智能实验室是人工智能学家与科学院相关机构联合成立的人工智能,互联网和脑科学交叉研究机构。未来智能实验室的主要工作包括:建立AI智能系统智商评测体系,开展世界人工智能智商评测&#xff1…

api laravel 统一返回方法_Laravel API 错误处理:当异常时,如何返回消息

image基于 API 的项目开发越来越受欢迎,并且使用 Laravel 就能很容易实现。但是在针对如何处理各种异常的话题很少被提及。所以 API 的使用者们经常会抱怨除了收到 Server error ,很少有更多的错误信息。那么,我们该如何优雅的处理 API 错误让…

计算机电力英语翻译,电力专业英语阅读与翻译..doc

电力专业英语阅读与翻译.电力专业英语阅读与翻译Summary of glossary 术语电力系统 (electric) power systempower generation 发电transmission system(network) 输电系统(网络)distribution system 配电系统发电 power generationpower plant 发电厂powerhouse 发电站hydropo…

python基础笔记_python基础学习笔记

一、Python四种类型的数据格式 整数----2、3、 长整数:指的是比较大一点的整数 浮点数----3.23、52.3EE:标记表示10的幂。 复数----(-54J)、(2.3-4.6J) 二、Python字符串 a 单引号:单引号输出字符串,字符串…

Nature好文:过去150年,科学与产业经历四段情缘!

来源:Nature 574, 481-485 (2019) doi: 10.1038/d41586-019-03172-5Nature(《自然》)创刊 150 周年之际,历史学家保罗卢西尔(Paul Lucier)特别撰写系列文章,回顾了这 150 年来科学体系的塑造。本…

eclipse导入项目pom文件报错_eclipse导入maven管理的项目时,pom.xml第一行报错。错误如图1。而且dubbo的xml也不识别。...

展开全部dubbo的问题是因为他的官网关了 对应的xsd无法获取到对于 eclipse 来说这个文件只能改为从62616964757a686964616fe59b9ee7ad9431333337383239本地读取才能正常修改方法是提取dubbo.jar META-INF 中的dubbo.xsd文件到随意一个目录,建议放Eclipse目录下就好打…

python爬取网页有乱码怎么解决_Python爬取网页requests乱码

**之前有在裁判文书上爬取数据,这段时间重新运行爬虫后发现无法获取网页数据, 找了一下发现requests网页源码返回的是乱码** (如下截取一部分返回的数据:不知道是不是网站对网页内容进行了加密,请问如何解决这个问题&a…

北京联合大学计算机学院在哪个校区,北京联合大学各校区联系地址大全

出国留学网考研院校频道为大家提供北京联合大学各校区联系地址大全,希望能帮助到大家。北京联合大学下设14所学院:北京联合大学应用文理学院 地址:海淀区北土城西路197号 邮编:100191北京联合大学师范学院 地址:朝阳区…

spring基础整理

spring基础教程&#xff1a;https://www.tutorialspoint.com/spring/spring_overview.htm 注入实例 <bean id"" class""> <constructor-arg ref"beanId" /> </bean> <bean id"beanId" class/> 转载于:https:/…

Gartner 2019年超融合魔力象限:新增深信服,国内华为、华云在榜

来源&#xff1a;云头条近日&#xff0c;国际权威研究分析机构Gartner公布了2019全球《超融合基础设施魔力象限》。报告显示国内仅有三家云计算厂商进入2019超融合基础设施魔力象限&#xff0c;分别是深信服、华为、华云数据。深信服超融合&#xff08;sangfor aCloud&#xff…

go结构体初始化_golang中结构体的初始化方法

目录1、自定义一个结构体type Vertex struct {X, Y float64}2、初始化方法-指针&#xff1a;rect1 : new(Vertex )rect2 : &Vertex {}rect3 : &Vertex {1, 2}rect4 : &Vertex {X:100, Y:200}注意: 这几个变量全部为指向Rect结构的指针(指针变量)&#xff0c;因为使…

python脚本转换成apk_apktool反编译apk并回编译

apktool反编译apk并回编译 下载apktool工具&#xff1a; apktool官方网站&#xff1a;https://ibotpeaches.github.io/Apktool/ 安装apktool并配置apktool环境变量 安装方法&#xff1a;https://ibotpeaches.github.io/Apktool/install 用apktool反编译apk文件 apktool d apkna…

计算机主机机箱面板辐射,电脑机箱如何防辐射----给大家科普一下

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼对于天天坐在电脑前的玩家和用户来说&#xff0c;防辐射已经成为一个不可忽视的问题&#xff0c;如果对于孕妇和小孩来说&#xff0c;则更值得重视。我们知道&#xff0c;在显示器已经过渡到液晶时代之后&#xff0c;电脑辐射就主要…