http协议与浏览器与TOMCAT

当在浏览器中输入 www.baidu.com时,

浏览器

1 会根据http协议构造请求头,请求体组合成包装好的数据。
请求头有字段 connection:keep_alive(http1.1默认)或者connection:close(http1.0默认)
2 调用操作系统实现TCP的API(linux中tcp_connect),在实际使用中,这个方法被包装在了另一个接口内,这个接口就是socket
3 发送数据

Server端会得到相关网页,这些网页又都包含了很多Http请求,又会给浏览器发送很多个http请求这些请求都要建立新的socket吗? 不是

具体解释 Tomcat如何处理http请求

取数据–接收到字节—按照http协议解析数据----请求头—判断connection----生成request对象—交给servlet—socket.output----socket.close

1 当Tomcat接收到请求中是close的,Tomcat会作出response,其中响应头部分connection也会是close。发送response后,tomcat就会断开socket,浏览器接收到response后,由于响应头也是close所以,浏览器也会断开socket
在这里插入图片描述
2 如果Tomcat接受的请求头connection是keep-alive的 只要keep-alive的http请求个数 小于 MAX_KEEP_ALIVE_REQUESTS(默认值100)就会一直保持socket。如果超过tomcat的响应头就会再次发送connection:close。

为什么这样做呢?~小demo

ServerSocket serverSocket = new ServerSocket();
serversocket.bind(new InetSocketAddress("localhost",8081));
Socket socket = serversocket.accept();
syetem.in.read

可以看到这里是没有接收数据的,一直在堵塞中。但是客户端是可以正常发送数据的,发送的数据会在recvbuf中。recvbuf的值也是可以设置的参数。所以要设置好tomcat参数合适的大小。
当recvbuf满了的时候,会造成内存溢出吗?其实是不会的。 原因很简单,因为一切都是基于TCP的,TCP的滑动窗口拥塞控制会在recvbuf满了的时候,客户端停止发送。
在这里插入图片描述
3 最大线程数和最大连接数。
最大连接数指同时能处理最多多少个socket连接。
最大线程数其实就是Tomcat内部线程池的大小。
在这里插入图片描述
4 tomcat如何实现keepalive
伪代码在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值