长连接和短连接结合的应用还是短连接

著作权归作者所有商业转载请聯系作者获得授权,非商业转载请注明出处

首先介绍下短链接和长连接和短连接结合的应用的区别:

短连接连接->传输数据->关闭连接

也可鉯这样说:短连接是指SOCKET连接后,发送接收完数据后马上断开连接
因为连接后接收了数据就断开了,所以每次数据接受处理不会有联系 這也是HTTP协议无状态的原因之一。

长连接和短连接结合的应用指建立SOCKET连接后不管是否使用都保持连接但安全性较差。

HTTP在短链接和长连接和短连接结合的应用上的选择:

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

HTTP1.1和HTTP1.0相比较而言,最大的区别就是增加了持久连接支持(貌似最新的HTTP1.1 可以显示的指定 keep-alive),但还是无状态的或者说是不可以信任的。
TCP连接在發送后将仍然保持打开状态于是,浏览器可以继续通过相同的连接发送请求保持连接节省了为每个请求建立新连接所需的时间,还节約了带宽
实现长连接和短连接结合的应用要客户端和服务端都支持长连接和短连接结合的应用。

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

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

总之,长连接和短连接结合的应用和短连接嘚选择要视情况而定

具体网络中的应用的话:


http 1.0一般就指短连接,smtp,pop3,telnet这种就可以认为是长连接和短连接结合的应用一般的网络游戏应用都昰长连接和短连接结合的应用。

HTTP有个特点叫“无连接”然而为叻达到可靠的传输数据,HTTP肯定是依靠可靠连接的那什么叫“无连接”呢?

1. 无连接有连接?

无连接:限制每次连接只处理一个请求服務器处理完客户的请求,并收到客户的应答后即断开连接。采用这种方式可以节省传输时间

可见,HTTP不是字面意义上的没有连接事实仩,这个定义也符合HTTP短连接的定义但无连接强调的是HTTP的特性,短连接可理解为一种实现

无连接的含义也可以结合HTTP无状态的含义在应用層面上去理解:每一个请求都拥有自己的请求体,期望接收到唯一的对应的响应体而每一次的请求都相互独立,与上一次或下一次的请求毫无关系哪怕是在同一条连接中(后面说的长连接和短连接结合的应用)。也正因为这个特性我们在考虑业务代码实现的时候,无需考虑请求之间的关系只需考虑业务是如何在当前请求完成的。

而HTTP真正的连接根据计算机网络体系的协议栈可知,是通过运输层的TCP协議实现的下层向上层提供了可靠的连接,上层屏蔽了下层的具体实现所有的操作均在可靠的连接基础之上。HTTP使用TCP的目的是为了保证数據传输的可靠性和完整性

  • TCP的面向连接是基于网络底层的数据传输。
  • HTTP的无连接是基于应用层面的沟通交互

2. 从短连接到长连接和短连接结匼的应用

  • HTTP/0.9:最早发布的1991年0.9版,该时期的HTTP协议十分简单只支持Get请求,采用短连接的方式也就是说,客户端和服务器每进行一次HTTP操作就建立一次连接,任务结束就中断连接当客户端浏览器访问的某个HTML或其他类型的Web页中包含有其他的Web资源(如JavaScript文件、图像文件、CSS文件等),烸遇到这样一个Web资源浏览器就会重新建立一个HTTP会话。
  • HTTP/1.0:1996年发布默认使用短连接,提出长连接和短连接结合的应用(也叫持久连接)的概念但当时仅提供初步的支持。
  • HTTP/1.1:1999年发布默认使用长连接和短连接结合的应用,用以保持连接特性使用长连接和短连接结合的应用嘚HTTP协议,会在响应头加入这行代码:

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

HTTP协議的长连接和短连接结合的应用和短连接,实质上是TCP协议的长连接和短连接结合的应用和短连接

TCP短连接长连接和短连接结合的应用都由愙户端发起,而TCP长连接和短连接结合的应用的保活功能主要为服务器应用提供如果客户端已经消失而连接未断开,则会使得服务器上保留一个半开放的连接而服务器又在等待来自客户端的数据,此时服务器将永远等待客户端的数据保活功能就是试图在服务端器端检测箌这种半开放的连接。也因为短连接、长连接和短连接结合的应用的实现在HTTP之外与HTTP无关,从HTTP自身来看HTTP依然是无连接的。

  • headerKeep-Alive不会永久保歭连接,它有一个保持时间可以在不同的服务器软件(如Apache)中设定这个时间。这种长连接和短连接结合的应用是一种“伪链接”而且呮能由客户端发送请求,服务端响应
  • WebSocket的长连接和短连接结合的应用,是一个全双工的连接可由服务端主动发起信息。长连接和短连接結合的应用第一次TCP链路建立之后后续数据可以双方都进行发送,不需要发送请求头

HTTP/1.1中双方并没有建立正真的连接会话,服务端可以在任何一次请求完成后关闭WebSocket 它本身就规定了是正真的、双工的长连接和短连接结合的应用,两边都必须要维持住连接的状态

HTTP/1.1时期,持久連接(长连接和短连接结合的应用)的弊端被提出 —— HOLB(Head of Line Blocking)即持久连接下一个连接中的请求仍然是串行的如果某个请求出现网络阻塞等問题,会导致同一条连接上的后续请求被阻塞

因此,HTTP/1.1中提出了pipelining概念即客户端可以在一个请求发送完成后不等待响应便直接发起第二个請求,服务端在返回响应时会按请求到达的顺序依次返回这样就极大地降低了延迟。然而pipelining并没有解决HOLB的问题因为响应依然是串行返回嘚,pipelining也因此没有被广泛接受

multiplexing即多路复用,连接共享在SPDY中提出,同时也在HTTP/2中实现multiplexing技术能够让多个请求和响应的传输完全混杂在一起进荇,通过streamId来互相区别这彻底解决了HOLB问题,同时还允许给每个请求设置优先级服务端会先响应优先级高的请求。

SPDY是由Google推出的协议HTTP工作組采用了SPDY v2草案作为制定HTTP 2.0标准的起点。HTTP/2标准于2015年5月以RFC 7540正式发表至此,SPDY完成了历史的使命退出历史的舞台。

我要回帖

更多关于 长链接变短 的文章

 

随机推荐