java http长连接_HTTP长连接是啥?底层是如何工作的?Tomcat是如何实现长连接的?

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

要明白HTTP长连接,得先明白Socket连接什么是Socket?百度一下,根本看不懂要理解Socket,得先理解TCP

17728208d8eedc48ef31ab6baa63f7bc.png

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得到的数据是字节,所以需要去解析数据。

32bb682cba416f0ae517b90271a57731.png

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

解析数据,解析请求行,请求头解析完数据之后,接下来该如何?

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

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

那该如何判断呢?

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

maxKeepAliveRequests:一个socket连接所能处理的request个数,达到了上限则关闭,默认为100keepAliveTimeout:Tomcat会不停的从socket中读取数据,如果在指定的keepAliveTimeout时间内没有读到数据,则关闭该socket,默认为20smaxConnections:Tomcat的并发控制,同时只支持maxConnections个socket,bio默认为200.

3ee0afbe61cf904b970e996dd68d4c1a.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值