长连接与短连接

一、长连接

长连接的过程:连接->传输数据->保持连接 -> 传输数据-> ………->直到一方关闭连接(多是客户端关闭连接),则连接结束。也就是说长连接会一直保持连接的状态,直到一方主动断开连接为止。

长连接指建立SOCKET连接后不管是否使用都保持连接,但这样安全性较差。
HTTP在短连接和长连接上的选择:HTTP是无状态的 ,也就是说浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。如果客户端浏览器访问的某个HTML或其他类型的Web页中包含有其他的Web资源,如JavaScript文件、图像文件、CSS文件等,当浏览器每遇到这样一个Web资源,就会建立一个HTTP会话。
HTTP1.1和HTTP1.0相比较而言,最大的区别就是增加了持久连接支持(貌似最新的HTTP1.1 可以显示的指定 keep-alive),但还是无状态的,或者说是不可以信任的。 如果浏览器或者服务器在其头信息加入了这行代码 Connection:keep-alive TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了带宽。
实现长连接要客户端和服务端都支持长连接。

二、短连接

短连接的过程:连接->数据交换->关闭连接

比如HTTP是无状态的的短链接,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就断开了连接。也就是说完成了数据交换就中断了联系。
具体过程就是浏览器客户端发起并建立TCP连接 -> 客户端发送http请求报文 -> 服务端接收到报文->服务端处理并发送Http响应报文给客户端,发送完毕之后立即调用socket.close方法->客户端接收响应报文->客户端最终会收到服务器端断开TCP连接的信号->客户端断开TCP连接,具体就是调用close方法。
也可以这样说:短连接是指SOCKET连接后,发送接收完数据后马上断开连接。因为连接后数据交换完成后就断开了,所以每次数据接受处理不会有联系。 这也是HTTP协议无状态的原因之一。

三、长连接与短连接的区别

  1. tcp长连接优缺点
  • 优点:长连接可以省去较多的tcp建立/关闭的操作,减少浪费,节省时间,对于频繁请求资源的客户,较适用于长连接;
  • 缺点:client和server如果长时间不关闭的话,会存在一个问题,随着客户的越来越多,server早晚会有扛不住的一天,这时需要采取一些策略,如关闭一些长时间不读写操作的连接,这样可以避免一些恶意连接导致server端服务受损,如果条件再允许,就可以以客户端为颗粒度,限制每个客户端的最大连接数。
  1. tcp短连接优缺点
  • 优点:短连接对于服务器来说较为简单,存在的连接都是有用的连接,不需要额外的控制;
  • 缺点:如果客户端连接频繁,会在tcp的建立和关闭上浪费时间。

四、长连接与短连接的应用场景

  1. 长连接应用场景
    长连接多用于操作频繁,点对点的通讯,而且连接数不能太多的情况。
    每个TCP连接都需要三次握手,这需要时间,如果每个操作都是先连接,再操作的话那么处理速度会降低很多,所以每个操作完后都不断开,每次处理时直接发送数据包就可以了,不用在去建立TCP连接。
    例如:数据库的连接用长连接,如果用短连接频繁的通信会造成socket错误,而且频繁的socket创建也是对资源的浪费,使用短连接也会频繁的进行建立与关闭连接的操作,这样也很浪费时间。
  2. 短连接应用场景
    像WEB网站的http服务一般都用短链接,因为长连接对于服务端来说会耗费一定的资源,而像WEB网站这么频繁的成千上万甚至上亿客户端的连接用短连接会更省一些资源,如果用长连接,并且同时有成千上万的用户,如果每个用户都占用一个连接的话,将是对资源的极大的损耗与浪费,完全没有必要使用长连接。所以当并发量大时,但每个用户无需频繁操作情况下使用短连接比较好。

参考博文:
(1) https://blog.csdn.net/qq_38270106/article/details/83539289
(2) https://blog.csdn.net/m0_37865510/article/details/83349488

原文地址:https://www.cnblogs.com/jasonboren/p/12005472.html