ajax轮询 & 长连接 & websocket

来源:互联网 发布:拦截视频广告软件 编辑:程序博客网 时间:2024/04/30 19:22

三次握手的无状态HTTP协议,应该是所有web应用的基础,以此来进行client和server的交互,但是在这种协议之下造成了1 request = 1 response, no request, no response的情况,也就是服务器只能被动地回应服务器端的请求,而不能主动发送消息给客户端,所有在一些即时应用上,http协议略显乏力,但即时如果也有轮询和long poll这两种方法来完成即时通讯。


1. ajax轮询

顾名思义,就是客户端不断发送ajax请求至后端,询问服务器端是否有新的消息需要传递给客户端。

但很明显,这种方式造成的资源浪费是巨大,除非是一些消息频率很高的应用,否则绝大多数时间下,客户端都是在做着无意义的请求。


2. 长连接

长连接其实是一种对轮询的一种改进,引用了阻塞这一概念。

也就是客户端发出一次请求,服务端在没有得到新消息之前,阻塞该请求,直到有新的消息为止,以此不断轮询。

这样虽然可以减少不必要的请求,但实质是和轮询一样的,而且会产生服务器阻塞所来带的消耗(高并发)。


所以,不论是轮询又或者是长连接,实际上都是需要消耗很多资源来完成模拟服务器端消息推送。

但websocket的出现则改变了这种情况。


3.websocket

websocket是HTML5中提出的一种新的协议,在websocket下,客户端需要向服务器发送一次http请求,该次请求用于建立服务器与客户端之间的连接,让服务器转换websocket协议处理请求,以回调的方式将服务器端的消息发送至客户端,从根本上解决http协议的被动型。

客户端 <--->  服务器  <---  web程序

当然这种方式需要服务器和客户端的支持。


0 0