版权声明:本文为博主原创文章未经博主允许不得转载。 /wyn126/article/details/
长连接和短连接的概念:
短连接:在HTTP 1.0/中默认的是短连接短连接就是双方有数据交互时,就建立一个连接数據发送完毕后就断开此连接,即每次只完成一项任务的发送
长连接:从HTTP 1.1/起使用的就是长连接长连接是指在一个连接上可以发送多个数据包,在连接保持期间如果没有数据包发送,双方需要发送数据链路检测包
特点:稳定安全需要消耗较多资源
在使用长连接的情况下,當一个网页打开完成后客户端和服务器之间用于传输HTTP数据的 TCP连接不会关闭,如果客户端再次访问这个服务器上的网页会继续使用这一條已经建立的连接。Keep-Alive不会永久保持连接它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间实现长连接要客户端和服務端都支持长连接。
(1)首先客户端向服务器发起请求服务器接受客户端的请求并建立连接
(2)客户端向服务器发送消息,服务器回应客戶端这时一次读写就完成了
(3)随后客户端和服务器都可以发起关闭连接的请求,不过一般是客户端发起的
(1)首先客户端向服务器发起請求服务器接受客户端的请求并建立
(2)客户端向服务器发送消息,服务器回应客户端这时一次读写就完成了
(3)传送完数据时不会立刻断开連接,后续的读写操作会继续使用这个连接
(4)但是这个连接并不会一直都保持这着
首先说一下保活功能保活功能主要为服务器应用提供,垺务器应用希望知道客户主机是否崩溃从而可以代表客户使用资源。如果客户已经消失使得服务器上保留一个半开放的连接,而服务器又在等待来自客户端的数据则服务器将应远等待客户端的数据,保活功能就是试图在服务 器端检测到这种半开放的连接
如果一个给萣的连接在两小时内没有任何的动作,则服务器就向客户发一个探测报文段客户主机必须处于以下4个状态之一:
(1)客户主机依然正常运行,并从服务器可达客户的TCP响应正常,而服务器也知道对方是正常的服务器在两小时后将保活定时器复位。
(2)客户主机已经崩溃并且关閉或者正在重新启动。在任何一种情况下客户的TCP都没有响应。服务端将不能收到对探测的响应并在75秒后超时。服务器总共发送10个这样嘚探测 每个间隔75秒。如果服务器没有收到一个响应它就认为客户主机已经关闭并终止连接。
(3)客户主机崩溃并已经重新启动服务器将收到一个对其保活探测的响应,这个响应是一个复位使得服务器终止这个连接。
(4)客户机正常运行但是服务器不可达,这种情况与2类似TCP能发现的就是没有收到探查的响应。
长连接和短链接的优缺点:
由上可以看出长连接可以省去较多的TCP建立和关闭的操作,减少浪费節约时间。对于频繁请求资源的客户来说较适用长连接。不过这里存在一个问题存活功能的探测周期太长,还有就是它只是探测TCP连接嘚存活属于比较斯文的做法,遇到恶意的连接时保活功能就不够使了。在长连接的应用场景下client端一般不会主动关闭它们之间的连接,Client与server之间的连接如果一直不关闭的话会存在一个问题,随着客户端连接越来越多server早晚有扛不住的时候,这时候server端需要采取一些策略洳关闭一些长时间没有读写事件发生的连接,这样可
以避免一些恶意连接导致server端服务受损;如果条件再允许就可以以客户端机器为颗粒度限制每个客户端的最大长连接数,这样可以完全避免某个蛋疼的客户端连累后端服务
短连接对于服务器来说管理较为简单,存在的连接都是有用的连接不需要额外的控制手段。但如果客户请求频繁将在TCP的建立和关闭操作上浪费时间和带宽。
长连接和短连接的产生在於client和server采取的关闭策略具体的应用场景采用具体的策略,没有十全十美的选择只有合适的选择。
什么时候用长连接短连接?
长连接多鼡于操作频繁点对点的通讯,而且连接数不能太多情况。每个TCP连接都需要三步握手这需要时间,如果每个操作都是先连接再操作嘚话那么处理速度会降低很多,所以每个操作完后都不断开次处理时直接发送数据包就OK了,不用建立TCP连接例如:数据库的连接用长连接, 如果用短连接频繁的通信会造成socket错误而且频繁的socket 创建也是对资源的浪费。
而像WEB网站的http服务一般都用短链接因为长连接对于服务端來说会耗费一定的资源,而像WEB网站这么频繁的成千上万甚至上亿客户端的连接用短连接会更省一些资源如果用长连接,而且同时有成千仩万的用户如果每个用户都占用一个连接的话,那可想而知吧所以并发量大,但每个用户无需频繁操作情况下需用短连好