远程连接不属于指定网络,NETGEAR拒绝连接请求_详解 Tomcat 的连接数与线程池

 2023-09-25 阅读 26 评论 0

摘要:点击上方蓝色字体,选择“标星公众号”优质文章,第一时间送达远程连接不属于指定网络、关注公众号后台回复pay或mall获取实战项目资料视频点击此链接:多套SpringCloud/SpringBoot实战项目,资料文档教程齐全远程连接超过最大连接数,作者:编

点击上方蓝色字体,选择“标星公众号”

优质文章,第一时间送达

远程连接不属于指定网络、31553c5c2f9325e5606dadba639ea3f1.png

关注公众号后台回复paymall获取实战项目资料视频

点击此链接:多套SpringCloud/SpringBoot实战项目,资料文档教程齐全

远程连接超过最大连接数,作者:编程迷思

来源:cnblogs.com/kismetv/p/7806063.html

前言

在使用tomcat时,经常会遇到连接数、线程数之类的配置问题,要真正理解这些概念,必须先了解Tomcat的连接器(Connector)。

wifi拒绝请求怎么办,在前面的文章 详解Tomcat配置文件server.xml 中写到过:Connector的主要功能,是接收连接请求,创建Request和Response对象用于和请求端交换数据;然后分配线程让Engine(也就是Servlet容器)来处理这个请求,并把产生的Request和Response对象传给Engine。当Engine处理完请求后,也会通过Connector将响应返回给客户端。

可以说,Servlet容器处理请求,是需要Connector进行调度和控制的,Connector 是Tomcat 处理请求的主干 ,因此Connector的配置和使用对Tomcat的性能有着重要的影响。这篇文章将从Connector入手,讨论一些与Connector有关的重要问题,包括NIO/BIO模式、线程池、连接数等。

根据协议的不同,Connector可以分为HTTP Connector、AJP Connector等,本文只讨论HTTP Connector。

一、Nio、Bio、APR

1、Connector的protocol

Connector在处理HTTP请求时,会使用不同的protocol。不同的Tomcat版本支持的protocol不同,其中最典型的protocol包括BIO、NIO和APR(Tomcat7中支持这3种,Tomcat8增加了对NIO2的支持,而到了Tomcat8.5和Tomcat9.0,则去掉了对BIO的支持)。

BIO是Blocking IO,顾名思义是阻塞的IO;NIO是Non-blocking IO,则是非阻塞的IO。而APR是Apache Portable Runtime,是Apache可移植运行库,利用本地库可以实现高可扩展性、高性能;Apr是在Tomcat上运行高并发应用的首选模式,但是需要安装apr、apr-utils、tomcat-native等包。

2、如何指定protocol

Connector使用哪种protocol,可以通过元素中的protocol属性进行指定,也可以使用默认值。

指定的protocol取值及对应的协议如下:

  • HTTP/1.1:默认值,使用的协议与Tomcat版本有关
  • org.apache.coyote.http11.Http11Protocol:BIO
  • org.apache.coyote.http11.Http11NioProtocol:NIO
  • org.apache.coyote.http11.Http11Nio2Protocol:NIO2
  • org.apache.coyote.http11.Http11AprProtocol:APR

如果没有指定protocol,则使用默认值HTTP/1.1,其含义如下:在Tomcat7中,自动选取使用BIO或APR(如果找到APR需要的本地库,则使用APR,否则使用BIO);在Tomcat8中,自动选取使用NIO或APR(如果找到APR需要的本地库,则使用APR,否则使用NIO)。

3、BIO/NIO有何不同

无论是BIO,还是NIO,Connector处理请求的大致流程是一样的:

在accept 队列中接收连接(当客户端向服务器发送请求时,如果客户端与OS 完成三次握手建立了连接,则OS 将该连接放入accept 队列);在连接中获取请求的数据,生成request ;调用servlet 容器处理请求;返回response 为了便于后面的说明,首先明确一下连接与请求的关系:连接是TCP层面的(传输层),对应socket;请求是HTTP层面的(应用层),必须依赖于TCP的连接实现;一个TCP连接中可能传输多个HTTP请求。

在BIO实现的Connector中,处理请求的主要实体是JIoEndpoint对象。JIoEndpoint维护了Acceptor和Worker:Acceptor接收socket,然后从Worker线程池中找出空闲的线程处理socket,如果worker线程池没有空闲线程,则Acceptor将阻塞。其中Worker是Tomcat自带的线程池,如果通过配置了其他线程池,原理与Worker类似。

534d95083586b8e32a21f1b8d90788dc.png

256d0bf3442183eeef7a11e17205928f.gif

有热门推荐👇

完美:Docker遇到Intellij IDEA这个插件,再次解放生产力~

奇葩需求:springboot项目注册为windows系统服务并设置开机自启

Java 反射到底慢在哪?

15000 字的 SQL 语句大全

贼厉害,手撸的 SpringBoot缓存系统,性能杠杠的!

Mybatis接口Mapper内的方法为啥不能重载吗?

干货分享:扫码关注下面的公众号获取面试资料+项目实战资料(电商/聚合支付)

00099e69f49d97679dadc3ce422f8d10.png

e0ae324732490d508404aa21383fa232.gif

点击JVM+MySQL+设计模式+分布式+微服务完整面试资料

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/4/94333.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息