详解Tomcat配置参数connectionTimeout意义

服务器 服务器产品
connectionTimeout参数是说当客户端与服务器连接以后,如果客户端不输入任何内容,那么超过了connectionTimeout设置的时间后连接会被断开。​

环境:springboot2.5.12

application.yml配置

server:
  port: 8081
  tomcat:
    maxThreads: 10
    maxConnections: 10
    acceptCount: 1  
    connectionTimeout: 3000

测试1:

在controller中休眠10s>connectionTimeout

@RestController
@RequestMapping("/test")
public class TestController {


  @GetMapping("/index")
  public Object index() {
    try {
      System.out.println(Thread.currentThread().getName()) ;
      TimeUnit.SECONDS.sleep(10) ;
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
    return "success" ;
  }
  
}

发现程序能正常地响应。

结论:connectionTimeout参数与具体的请求响应时间是没有关系的。

测试2:

通过HttpURLConnection发送请求

public class HttpURLConnectionDemo {
  
  public static void main(String[] args) throws Exception {
    HttpURLConnection con = (HttpURLConnection) new URL("http://localhost:8081/test/index").openConnection() ;
    con.setDoInput(true) ;
    con.setDoOutput(true) ;
    long start = System.currentTimeMillis() ;
    InputStream is = con.getInputStream() ;
    Scanner scan = new Scanner(is) ;
    while(scan.hasNext()) {
      System.out.println("接收到内容:" + scan.next() + "\n耗时:" + (System.currentTimeMillis() - start)) ;
    }
    scan.close() ;
    con.disconnect() ;
    con = null ;
  }
  
}

结果:

图片图片

结论:connectionTimeout参数与什么样的客户端做连接请求没关系。

测试3:

通过Socket建立连接

public class TomcatConnectionTimeoutDemo {
  
  public static void main(String[] args) throws Exception {
    Socket socket = new Socket("127.0.0.1", 8081) ;
    long start = System.currentTimeMillis() ;
    InputStream is = socket.getInputStream() ;
    is.read() ;
    System.out.println(System.currentTimeMillis() - start ) ;
  }
  
}

运行结果:

图片图片

差不多3s后程序结束了,也就是连接断开了。接着测试:

public class TomcatConnectionTimeoutDemo {
  
  public static void main(String[] args) throws Exception {
    Socket socket = new Socket("127.0.0.1", 8081) ;
    long start = System.currentTimeMillis() ;
    final OutputStream os = socket.getOutputStream() ;
    new Thread(() -> {
      Scanner scan = new Scanner(System.in) ;
      while(scan.hasNext()) {
        String content = scan.next() ;
        System.out.println("准备发送:" + content) ;
        try {
          os.write(content.getBytes()) ;
          os.flush() ;
        } catch (IOException e) {
          e.printStackTrace() ;
        }
      }
    }).start() ;
    InputStream is = socket.getInputStream() ;
    is.read() ;
    System.out.println(System.currentTimeMillis() - start ) ;
  }
  
}

结果1(什么也不做):

图片图片


结果2(控制台不停的输入内容):

图片图片

程序一开始运行,控制台不停地输入内容,发现程序一直正常,当停留3秒后在输入内容,发现程序又断开了。

结论:connectionTimeout参数是说当客户端与服务器连接以后,如果客户端不输入任何内容,那么超过了connectionTimeout设置的时间后连接会被断开。

责任编辑:武晓燕 来源: Spring全家桶实战案例源码
相关推荐

2010-09-17 15:57:23

TomcatJVM

2010-09-25 13:31:00

TomcatJVM

2009-07-15 14:08:06

MyEclipse T

2010-11-29 13:33:00

sybase配置参数

2018-12-25 10:36:41

TomcatServer文件

2011-02-25 11:16:38

ApacheTomcat

2011-03-07 10:02:51

awstatstomcat

2018-10-08 09:05:52

TomcatServer配置

2010-09-27 09:53:45

TomcatJVM

2010-09-26 11:00:48

JVM参数配置

2009-07-09 14:02:58

Tomcat JDK

2011-11-25 09:09:09

JavaTomcatant

2009-12-24 17:41:12

ADO Connect

2009-06-03 16:33:53

安装jdk tomcaeclipse配置

2018-09-13 08:47:09

Tomcat负载均衡服务器

2019-09-03 15:36:58

ApacheTomcat配置

2020-07-08 13:46:27

ApacheTomcat配置

2009-07-02 13:07:12

JSP+Tomcat配

2009-09-23 17:16:59

报表参数

2009-07-17 17:00:13

在JRuby下将RoR
点赞
收藏

51CTO技术栈公众号