HTTP长连接、长轮询和短连接、短轮询

HTTP

HTTP1.0:规定浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接,服务器完成请求处理后立即断开TCP连接

HTTP1.1:它支持持续连接.通过这种连接,就有可能在建立一个TCP连接后,发送请求并得到回应,然后发送更多的请求并得到更多的回应.通过把建立和释放TCP连接的开销分摊到多个请求上,则对于每个请求而言,减少了建立和关闭连接的消耗和延迟

而且,还可以发送流水线请求,也就是说在发送请求1之后的回应到来之前就可以发送请求2.也可以认为,一次连接发送多个请求,由客户机确认是否关闭连接,而服务器会认为这些请求分别来自不同的客户端。

HTTP分为长连接和短连接,其实本质上是说的TCP连接。TCP连接是一个双向的通道,它是可以保持一段时间不关闭的,因此TCP连接才有真正的长连接和短连接这一说。HTTP协议是应用层的协议,而TCP才是真正的传输层协议,只有负责传输的这一层才需要建立连接。

长连接

客户端不停的向服务器发送请求以获取最新的数据信息。减少了每次建立连接和断开连接的开销。所以现在大部分都是长连接,例如一个页面有很多文件,JS文件,CSS文件等等,不能每次都要建立一次连接,所以长连接是比较好的解决办法。

长连接不会长时间保持的,如果长时间没有响应,超时会自动断开的。但是如果都保持连接,那么服务器会爆掉,所以TCP连接数量是有限制的。HTTP1.1默认是长连接,也就是默认Connection的值就是keep-alive

短连接

数据传送过程中,只在需要发送数据时,才去建立一个连接,数据发送完成后,则断开此连接,即每次连接只完成一项业务的发送。

轮询

向服务器发送请求,服务器返回请求结果。不断的操作,就叫轮询

短轮询

不断的轮询的时候,每次都是即时发送即时回复,这样来更新前端的数据,用来保证数据的前后台同步。
比如电商网站,每个物品的库存,是要不断更新的,就会在前段不断的发起请求,保证数据同步。

但这样有个缺点,就是浪费了大量的资源,假如有很多人在浏览这个物品,但是暂时都没有下单,大量的请求可能已经占用了服务器的所有资源。

缺点:请求中有大半是无用,浪费带宽和服务器资源。
实例:适于小型应用。

长轮询

服务器收到请求后如果有数据,立刻响应请求;如果没有数据 就会 停留 一段时间,这段时间内,如果服务器请求的数据到达(如查询数据库或数据的逻辑处理完成),就会立刻响应;如果这段时间过后,还没有数据到达,则以空数据的形式响应http请求;若浏览器收到的数据为空,会再次发送同样的http请求到server;客户端处理完响应信息后再向服务器发送新的请求。

优点:在无消息的情况下不会频繁的请求。
缺点:服务器hold连接会消耗资源。

实例:WebQQ、Hi网页版、Facebook IM。



参考文章:

http://web.jobbole.com/85541/

http://www.cnblogs.com/hoojo/p/longPolling_comet_jquery_iframe_ajax.html

猜你喜欢

转载自blog.csdn.net/qq_41620002/article/details/79993229