zoukankan      html  css  js  c++  java
  • HTTP长连接

    Adblocker
     
     
     
     

    HTTP长连接

     

    什么是HTTP长连接,底层是如何工作的?Tomcat是如何实现长连接的?

     

    要明白HTTP长连接,得先明白Socket连接

     

    什么是Socket?百度一下,根本看不懂

     

    要理解Socket,得先理解TCP

     

    TCP是传输层协议,有Linux、Windows等操作系统实现

     

    Socket是对TCP协议抽象出来的上层接口,供操作系统上层的应用程序使用

     

    上层应用程序来使用socket,比如Tomcat、比如浏览器

     

    浏览器在发送一个请求时,先得建立一个Socket,比如:

    Socket socket = new Socket("localhost", 8081);

    建立完Socket连接之后,浏览器开始构造数据,通过OutputStream发送出去。

     

    这里涉及到Socket服务端的几个问题。

     

    如果服务端Socket没有使用InputSteam来接收数据,那么数据存在哪了。

     

    对于服务端Socket,有一个recvbuf来存储数据

     

    所以java中,在利用InputSteam去read数据时,是从recvbuf来读取数据的,演示一下read方法:

    1. 如果没有使用read会怎么样
    2. 如果使用了read,那么read方法的返回值表示什么意思?

     

    当从recvbuf得到的数据是字节,所以需要去解析数据。

     

    比如Tomcat从Socket得到数据之后,就需要解析数据,那么怎么解析呢?

     

    解析数据,解析请求行,请求头

     

    解析完数据之后,接下来该如何?

     

    这里就是所谓的长连接和短连接。

     

    比如Tomcat解析完某个HTTP请求,并调用了Servlet之后,就会判断是否需要关闭Socket。

     

    那该如何判断呢?

     

    1. 判断请求头Connnection,如果是close则关闭socket,如果是keep-alive,则不关闭
    2. 判断keepAliveTimeout、maxConnections、maxKeepAliveRequests

     

    maxKeepAliveRequests:一个socket连接所能处理的request个数,达到了上限则关闭,默认为100

    keepAliveTimeout:Tomcat会不停的从socket中读取数据,如果在指定的keepAliveTimeout时间内没有读到数据,则关闭该socket,默认为20s

    maxConnections:Tomcat的并发控制,同时只支持maxConnections个socket,bio默认为200.

     

     

     
  • 相关阅读:
    Evolution of Image Classifiers,进化算法在神经网络结构搜索的首次尝试 | ICML 2017
    YOLOv1/v2/v3简述 | 目标检测
    MetaQNN : 与Google同场竞技,MIT提出基于Q-Learning的神经网络搜索 | ICLR 2017
    FCOS : 找到诀窍了,anchor-free的one-stage目标检测算法也可以很准 | ICCV 2019
    canvas图表(3)
    WebGL学习(2)
    canvas图表(1)
    WebGL学习(1)
    前端特效列表
    canvas绘制太阳系
  • 原文地址:https://www.cnblogs.com/lanqingzhou/p/13590343.html
Copyright © 2011-2022 走看看