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轮询 感觉自己还有好多东西要学啊, 加油加油!!

 

posted @ 2016-07-20 15:05  小牛刀  阅读(556)  评论(0编辑  收藏  举报