长连接和短连接的区别

TCP长链接与短链接的区别

1. TCP链接html

当网络通讯时采用TCP协议时,在真正的读写操做以前,server与client之间必须创建一个链接,当读写操做完成后,双方再也不须要这个链接时它们能够释放这个链接,链接的创建是须要三次握手的,而释放则须要4次握手,因此说每一个链接的创建都是须要资源消耗和时间消耗的web

经典的三次握手示意图:后端

经典的四次握手关闭图:服务器

2. TCP短链接网络

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

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

3.TCP长链接server

接下来咱们再模拟一下长链接的状况,client向server发起链接,server接受client链接,双方创建链接。Client与server完成一次读写以后,它们之间的链接并不会主动关闭,后续的读写操做会继续使用这个链接。htm

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

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

  1. 客户主机依然正常运行,并从服务器可达。客户的TCP响应正常,而服务器也知道对方是正常的,服务器在两小时后将保活定时器复位。

  2. 客户主机已经崩溃,而且关闭或者正在从新启动。在任何一种状况下,客户的TCP都没有响应。服务端将不能收到对探测的响应,并在75秒后超时。服务器总共发送10个这样的探测 ,每一个间隔75秒。若是服务器没有收到一个响应,它就认为客户主机已经关闭并终止链接。

  3. 客户主机崩溃并已经从新启动。服务器将收到一个对其保活探测的响应,这个响应是一个复位,使得服务器终止这个链接。

  4. 客户机正常运行,可是服务器不可达,这种状况与2相似,TCP能发现的就是没有收到探查的响应。

从上面能够看出,TCP保活功能主要为探测长链接的存活情况,不过这里存在一个问题,存活功能的探测周期太长,还有就是它只是探测TCP链接的存活,属于比较斯文的作法,遇到恶意的链接时,保活功能就不够使了。

在长链接的应用场景下,client端通常不会主动关闭它们之间的链接,Client与server之间的链接若是一直不关闭的话,会存在一个问题,随着客户端链接愈来愈多,server迟早有扛不住的时候,这时候server端须要采起一些策略,如关闭一些长时间没有读写事件发生的链接,这样能够避免一些恶意链接致使server端服务受损;若是条件再容许就能够以客户端机器为颗粒度,限制每一个客户端的最大长链接数,这样能够彻底避免某个蛋疼的客户端连累后端服务。

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

转自: http://www.cnblogs.com/beifei/archive/2011/06/26/2090611.html

相关文章
相关标签/搜索