WebSocket原理及与http1.0/1.1 long poll跟 ajax轮询的区别【转自知乎】
今天学习了几个以前没有见过的东东,作者的文章写的还是很通熟易懂的!! 起码我基本都看懂了(2333)————正文
今天要学习的是WebSocket原理与http1.0/1.1 long poll 和 ajax轮询的区别
WebSocket是HTML5出的东西,也就是说HTTP谢意没有变化,或者说没有关系。首先HTTP有1.1和1.0直说,也就是所谓的keep-alive,把多个HTTP请求合并为一个,但是WebSocket其实是一个新协议,跟HTTP协议基本没有关系,只是为了兼容现有浏览器的握手规范而已。也可以说WebSocket和HTTP有一定的交集,但是并不是全部。另外WebSocket相对于HTTP这种非持久的协议来说是一个持久化的协议。一个简单的例子:
HTTP的生命周期通过Request和Response来界定,一个Request对应一个Response,在HTTP1.0中,这次HTTP请求就结束了。但是在HTTP1.1中进行了改进,使得有一个keep-alive,也就是说,在一个HTTP连接中,可以发送多个Request,接受多个Response。(但是,在HTTP中,永远都是一个Request只能有一个Response,而且这个Response也是被动的,不能主动发起。也就是说,只能是浏览器发送了Request,服务器才能有一个Response,服务器不能主动向浏览器发送Response。)
下面介绍一下Ajax轮询、long poll的原理:
Ajax轮询的原理就是让浏览器隔个几秒就发送一次请求,询问服务器是否有新信息。
long poll的原理和ajax轮询差不多,都是采用轮序难道方式,不过采取的是阻塞模型(一直请求,没有收到回复就不停止),也就是说,客户端发起连接后,如果没有消息,就一直不反悔Response给客户端。直到有消息才返回,返回完之后,客户端再次建立连接,周而复始。
Ajax轮询和long poll两种方式都有一个共同的特性: 被动性。 都是在不断地建立HTTP连接,然后等待服务端处理。服务端不能主动联系客户端,只能由客户端发起。
这两种方式都有一个共同的缺点,那就是非常耗费资源。
ajax轮询,需要服务器又很快的处理速度和资源。
long poll需要有很高的并发,也就是说同时接待客户的能力
而WebSocket是和服务器建立持久连接,只需要一次HTTP握手。所以说整个请求过程是建立再一次连接/状态中,也就避免了HTTP的非状态性,服务器端会一直知道你的信息,直到你关闭请求。
第一次接触WebSocket http协议 long poll ajax轮询 感觉自己还有好多东西要学啊, 加油加油!!