美文网首页
长轮询&短轮询

长轮询&短轮询

作者: Travis_Wu | 来源:发表于2020-07-20 11:58 被阅读0次

    一、http协议

    http 协议是请求/响应范式的,每一个 http 响应都是由一个对应的 http 请求产生的,http 协议是无状态的,多个 http 请求之间是没有关系的。


    二、http长链接

    • 所谓 http 长连接,就是多个 http 请求共用一个 tcp 连接,这样可以减少多次临近 http 请求导致 tcp建立关闭所产生的时间消耗。

    • 目前 http 协议普遍使用的是 1.1 版本,之前有个 1.0 版本,两者之间的一个区别是 1.1 支持 http 长连接, 或者叫持久连接。1.0 不支持 http 长连接,每次一个 http请求响应后都关闭 tcp 连接,下个 http 请求会重新建立 tcp 连接。

    • http 1.1 中在请求头和相应头中用 connection字段标识是否是 http长连接

      1. connection:keep-alive 表明是 http 长连接
      2. connection:closed 表明服务器关闭 tcp 连接
    • 与 connection 对应的一个字段是keep-live http响应头中出现,他的格式是 timeout=30,max=5, timeout 是两次 http 请求保持的时间(s),max 是这个 tcp 连接最多为几个 http请求重用


    三、http 长轮询

    • http 长轮询是服务器收到请求后:

      1. 如果有数据,立刻响应请求。
      2. 如果没有数据就会 hold 一段时间,这段时间内如果有数据立刻响应请求,如果时间到了还没有数据, 则响应 http 请求,浏览器收到 http 响应后立刻发送一个同样http 请求查询是否有数据。
    • http 长轮询的局限:

      1. 浏览器端对统一服务器同时 http 连接有最大限制,最好同一用户只存在一个长轮询。
      2. 服务器端没有数据 hold 住连接时会造成浪费,容易产生服务器瓶颈。

    四、http 短轮询

    • http端轮询是服务器收到请求不管是否有数据都直接响应 http 请求。浏览器受到 http 响应隔一段时间在发送同样的http 请求查询是否有数据。

    • http 短轮询的局限是实时性低。

    • 与长轮询的相同点:可以看出 http 长轮询和 http 短轮询的都会 hold 一段时间。

    • 与长轮询的不同点:
      长轮询在服务端会 hold 一段时间,短轮询在浏览器端 假装"hold" 一段时间。


    相关文章

      网友评论

          本文标题:长轮询&短轮询

          本文链接:https://www.haomeiwen.com/subject/ccmekktx.html