• 当 HTTP 连接池遇上 KeepAlive 时


    https://mp.weixin.qq.com/s?__biz=MzUzMTA2NTU2Ng==&mid=2247485891&idx=2&sn=82dd4786e38e23a10fa9210745c99130&chksm=fa497672cd3eff64fb06873ba909140f6f839f9565e2815eff5476102e91b60f46b67ea5acab&mpshare=1&scene=1&srcid=1224grAV7qLPEUdAheKysfbY&key=2839d46a2ccd1ada80a45616e1459f652a2d24283411ee5192afdf9e25742273e3831395db8536585af5fe7013dc05cc705f68ab85bda36bec98f5ebbd16eb072fb6615bfaaa25fdaefe047387efad61&ascene=0&uin=MTA2NzUxMDAyNQ%3D%3D&devicetype=iMac+MacBookAir6%2C2+OSX+OSX+10.10.5+build(14F2511)&version=11020012&lang=zh_CN&pass_ticket=NKOOH07PkTOF951qDy4B3Lw7qqHzzY35y1dPWQP56ICdSnZ6tBfyKRtR6PKeE1%2FM

    1)该文有一个错误之处 :

    http的keepalive:用于http协议。在http 1.1中,为了解决长连接提出的。

    这个并不是http 1.1中提出的,1.0中已提出,但需要客户端显式描述keeplive,而在http 1.1中,默认开启

    2)http的keep-alive和tcp的keepalive区别

    3)tomcat http 1.0实现

    tomcat8中,如果发送的是http1.0的协议。 tomcat8返回的均是1.1的协议。并且不管请求的header有没有Connection:keepalive ,均会在返回的header中加上connection:close 。下面是访问tomcat8的截图:

    • GET请求是http 1.0,但是返回的是1.1的协议:

    • 返回的header里面有Connection:close

    4)tomcat http 1.1实现

    tomcat8主要有两个参数来控制keepalive的机制。keepAliveTimeout 和maxKeepAliveRequests

    • keepAliveTimeout: 默认和soTimeout 值保持一致,该值为20000ms,也就是在这么长时间内没有通信,tomcat会关闭掉该连接。设置为-1 则代表不会关闭该连接。

    • maxKeepAliveRequests :默认为100,也就是在keepAliveTimeout时间内,如果使用次数超过100,则会关闭掉该连接。设置为-1,则代表不会关闭连接。在关闭后,会在返回的header上面加上Connection:close 。

    如果需要tomcat保持长连接:可配置 maxKeepAliveRequests = "-1" keepAliveTimeout=-"-1" ,则tomcat8不会关闭掉该连接。

     

     

  • 相关阅读:
    Linux kill -9 和 kill -15 的区别
    redis 学习笔记之(五)redis-cli 命令
    专题(十四)awk
    Linux 学习笔记之(十一)SSH
    Linux 学习笔记之(十)查看文件
    rust 读写文件
    rust 显示本机ip
    rust error: linking with `link.exe` failed: exit code: 1181(未解决)
    Building a Concurrent Web Server with Async Rust
    Asynchronous Programming in Rust
  • 原文地址:https://www.cnblogs.com/silyvin/p/10224076.html
Copyright © 2020-2023  润新知