一.TCP连接

  当网络通信时采用TCP协议时,在真正的读写操作之前,客户端与服务器之间必须建立连接,当读写操作完成后,双方都不再需要这个连接时可以释放这个连接。连接的建立依靠“三次握手”,而释放则需要“四次握手”,所以每个连接都是需要资源消耗的。

  经典的三次握手建立连接示意图:

  TCP连接_长连接

 

   TCP连接_服务器_02

 

   经典的四次握手关闭连接示意图:

  TCP连接_短连接_03

 

   TCP连接_短连接_04

 

 

二.TCP短连接

  模拟一下TCP短连接的情况:客户端向服务器发起连接请求,服务器接到请求,然后双方建立连接。客户端向服务器发送消息,服务器回应客户端,然后一次请求就完成了。这时候双方都可以发起关闭请求,不过一般都是客户端发起关闭请求。上述可知,短连接一般只会再 客户端/服务器 间传递一次请求操作。

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

 

三.TCP长连接

  模拟一下TCP长连接的情况:客户端向服务器发起连接,服务器接受客户端连接,双方建立连接,客户端与服务器完成了一次请求后,它们之间的连接并不会主动关闭,后续的读写操作会继续使用这个连接。

  TCP的保活功能主要为服务器应用提供。如果客户端已经消失而连接未断开,则会使得服务器上保留一个半开放的连接,而服务器又在等待来自客户端的数据,此时服务器将永远等待客户端的数据。保活功能就是试图再服务器端检测这种半开放的连接。

  如果一个给定的连接在两个小时内没有任何动作,服务器就向客户端发送一个探测报文段,根据客户端主机响应探测4个客户端状态:

  1. 客户主机依然正常运行,且服务器可达。此时客户的TCP响应正常,服务器将保活定时器复位。
  2. 客户主机已经崩溃,并且关闭或者正在重新启动。上述情况下客户端都不能响应TCP。服务端将无法收到客户端对探测的响应。服务器总共发送10个这样的探测,每个间隔75秒。若服务器没有收到任何一个响应,它就认为客户端已经关闭并终止连接。
  3. 客户端崩溃并已经重新启动。服务器将收到一个对其保活探测的响应,这个响应是一个复位,使得服务器终止这个连接。
  4. 客户机正常运行,但是服务器不可达。这种情况与第二种状态类似。

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

  长连接优点:

    省去较多的TCP建立和关闭操作,减少浪费,节约时间。

  长连接的缺点:

    保活功能探测周期太长,如果遇到恶意连接时,客户端与服务器之间的连接一直不关闭,会存在一个问题,随着客户端连接越来越多,服务器早晚有抗不住的时候。

    服务器采取的策略:如关闭一些长时间没有读写事件发生的连接

  短连接优点:对于服务器来说管理较为简单,存在的连接都是有用连接,不需要额外控制手段。

  短连接缺点:客户端请求频繁,将在TCP的建立和关闭操作上浪费时间和带宽。

 

五.什么时候用长连接,短连接

  长连接用于操作频繁,点对点通讯,而且连接数不能太多的情况。例如:数据库的连接用长连接,如果用短连接频繁的通信会造成socket错误,而且频繁的socket创建也是对资源的浪费。

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