zoukankan      html  css  js  c++  java
  • 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轮询 感觉自己还有好多东西要学啊, 加油加油!!

  • 相关阅读:
    自定义行操作事件——DataGrid系列
    分页样式——DataGrid系列
    勾选批量操作——DataGrid系列
    快速排序的基本实现
    2021/06--09学习情况一些总结和反思
    IntegerCache的一些联想
    Hibernate, Jpa, Spring Data Jpa的关系与区别
    Springboot+Hibernate+Transactional中save提交引发的db异常无法捕获
    一个涉及多系统多步骤的业务需求设计与思考
    Use SQL to query dataverse
  • 原文地址:https://www.cnblogs.com/shw13/p/5688393.html
Copyright © 2011-2022 走看看