Http长连接短连接长轮询

1HTTP的长连接和短连接本质上是TCP长连接和短连接。HTTP属于应用层协议,在传输层使用TCP协议,在网络层使用IP协议。IP协议主要解决网络路由和寻址问题,TCP协议主要解决如何在IP层之上可靠地传递数据包,使得网络上接收端收到发送端所发出的所有包,并且顺序与发送顺序一致。TCP协议是可靠的、面向连接的。

HTTP协议是无状态的,指的是协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。也就是说,打开一个服务器上的网页和上一次打开这个服务器上的网页之间没有任何联系。HTTP是一个无状态的面向连接的协议,无状态不代表HTTP不能保持TCP连接,更不能代表HTTP使用的是UDP协议(无连接)。

2说长连接和长轮询,这两个是为了实现服务器push实现的机制,前面说到了,http是一问一答模式,客户端不发请求服务器就永远也不会响应,但是在实时通信和消息推送这样的场景完全不合理啊,服务器必须一有数据就要发给我,这样才是实时,为了解决这个问题,所以有很多服务器push技术。

长轮询不是一个真正的push技术,传统的轮询是前端ajax轮询,每隔一段时间发一个请求,服务器响应后马上关掉连接,但是这种方式明显有很大的开销,所以才有了长轮询,就是响应时间变长了,浏览器(客户端)发送一个请求,服务器hold住连接(就是循环加睡觉,可以到网上找找简单的实现代码),等有消息的时候才返回,当然浏览器的这个连接在这个过程中可以阻塞也可以异步非阻塞,ajax是异步的,为什么长轮询可以当push技术用,和传统的有什么区别,是因为,长轮询技术要求服务器一旦发送了响应,客户端必须马上再发一个请求,这就变成了服务器是主动方,所以才说是一种伪push技术

3connection:keep-alive这个首部在HTTP1.0+中支持,默认未激活,除非客户端显式地发送这个首部,服务器知道后再决定用不用持久连接,如果服务器返回了一样的Connection:keep-alive,客户端就认为服务器开了持久连接,如果没有(Connection:close),客户端收到响应数据后就会关闭连接,如果想一直保持,那客户端还得每次都带上这个首部。

4Comet是一种用于web的推送技术,能使服务器实时地将更新的信息传送到客户端,而无须客户端发出请求,目前有两种实现方式,长轮询和iframe流(长连接流)。

推送技术,又名反向AJAX,指的是一种基于Internet,将由中心或发布者发出消息传输给用户的技术。与之相对的是拉取(参见ajax),这种情况下请求是由用户或客户端主动发起的。

5:长连接,在页面里嵌入一个隐蔵iframe,将这个隐蔵iframesrc属性设为对一个长连接的请求或是采用xhr请求,服务器端就能源源不断地往客户端输入数据。优点:消息即时到达,不发无用请求;管理起来也相对方便。缺点:服务器维护一个长连接会增加开销。

6:现在流行的push技术是websocket,这是一种基于HTTP协议的新协议,实现了全双工通信,websocket中不再有主动方和被动方,都是对等方,客户端和服务器可以随时互相发送数据。

猜你喜欢

转载自blog.csdn.net/ivalue/article/details/80165413