• Http长连接 和 短连接 原理


    1. 在请求头中有一个connection的键,它对应的值有keep-alive 和 close 两个值。
    2. keep-alive就是用于告诉服务器需要保持长连接。
    3. close就是用于告诉服务器这是个短链接。
    4. 底层原理
      1. 数据的传输使用的是传输层的TCP协议和UDP协议。而HTTP使用传输层的TCP协议进行实现。
      2. TCP协议只是一种协议,规定了一些东西,但具体实现是谁来实现的了?
        • 具体实现是操作系统来实现这个这个协议的,一般都是使用C语言编写的。
      3. 实现了TCP协议后我们就能直接使用操作系统上实现TCP的一些方法和属性吗?
        • 肯定是不可能的,直接让你调用操作系统的方法和属性,可能会有一些安全性问题。
      4. 不让直接调用,那该怎么调用系统实现的TCP的属性和方法了?
        • 会有专门的开发人员对这些方法进行封装,就是在这些方法之上在套一个方法,而这个套的方法里面就会有一些列的校验和规则
        • 就一定不能直接调用系统的方法吗?
          • 也是可以的,但是容易出现各种各样问题。
      5. 这个套的方法是用什么实现的?
        • socket 就是实现TCP功能的类,每种程序设计语言应该都有自己实现的socket。
      6. 我们现在就可以使用编程语言 的Socket 去实现TCP规则了。
      7. 但我不是要实现HTTP协议吗?
        • 所以我们在实现HTTP的有连接的规则后,还需要在这基础之上再加上HTTP协议的一些特殊规则。
      8. 那什么是HTTP协议的特殊规则?
        • HTTP协议的特殊规则表现再 请求响应 的数据格式中。我们需要去解析这些数据格式里面的内容,这些内容又代表了什么。
          • 内容的意义,在HTTP协议文档中已经说明的非常清楚,这时就需要我们自己去实现这些规则。
        • 让我去完成特殊规则的编写比较麻烦,所以就出现了一些开发人员编写好以后发出来给我们使用代码,这些代码我们可以叫它web应用服务器。为什么这样叫了?
          • 因为web应用都是使用HTTP协议发送接收数据,而将HTTP协议实现的框架(代码) 就可以解析HTTP协议。这个框架给这些web应用提供HTTP协议解析的服务,所以这个框架就可以叫web应用服务器
      9. 如果使用Tomcat(框架)当web应用服务器。
        1. tomcat在接受到客户端发送的HTTP协议格式的数据,首先会对其内容解析,然后判断connection的值为keep-aliveclose
        2. tomcat里面会有一个while(one)循环,connection的值为keep-alive就会将one值设置为true,从而保证一直循环获取客户端发送的请求。
          1. 这里有个疑问服务端会一直获取客户端发送的数据吗?就是一直保持这个socket连接不断开。
            • 答案是:不会的服务端可以设置最大解释请求次数,例如:接受10次请求这个socket就会断开。
            • 还可以设置最大响应时间,就是客户端多长时间之内没有给服务端发送请求,服务器也会默认断开。
            • 默认断开就是将 one设置成false,给客户端发送connection:close响应头
        3. connection的值为keep-alive就会将one值设置为false,就会跳出循环,不在获取客户端请求。会关闭socket,然后再给客户端发送connection:close响应头,这个被浏览器解析后就知道了服务器关闭了连接。说明这个socket连接不能再次使用,下次发送请求需要从新创建个socket连接。

    其中的tomcat我并没有去看过源代码,不清楚是怎么实现的我猜想是这样是这样实现的。欢迎大家指出其中错误。

  • 相关阅读:
    Spring Cloud Nacos 2021使用LoadBalancer做负载均衡
    非科班程序员逆袭:一个被称阿里“码神”,另一个颠覆软件生态
    泛微E-Office前台文件读取漏洞
    记录一个因变量遮蔽引起的“友尽”级bug
    C# 实现xlsx文件导入
    AndroidNDK JNI中调用java方法
    【Java毕设】基于SpringBoot实现新冠疫情统计系统(Idea+Navicat)
    Code Review:提升代码质量与团队能力的利器
    KNN分类算法
    2022-08-23-jdk8新特性
  • 原文地址:https://blog.csdn.net/Snow_760/article/details/138186234