• webSocket连接数太多启动不起来怎么办?


    前言

    因为SpringBoot 自带tomcat,而tomcat默认支持1W的连接数量,超过就会拒绝。既然问题出在tomcat,那么现在就有两个方案。

    1. 调大tomcat的连接数量;
    2. 容器换成jetty。

    对于需要保持数十万的长连接,jetty无疑更适合作为启动容器;
    启动容器替换成jetty,只需要在jar引用的时候排除掉tomcat,并且加上jetty的jar附上jar引用代码

    <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-webartifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-tomcatartifactId>
            exclusion>
        exclusions>
    dependency>
    
    <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-jettyartifactId>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    聊聊jetty

    前言

    在我们使用SpringBoot开发单体应用或者微服务应用的时候,会引入spring-boot-starter-web这个starter组件,其嵌入Jetty、Tomcat、Undertow三种servlet容器供大家选择,默认是Tomcat容器。

    在日常工作中,SpringBoot 默认推荐的配置并一定适用于所有情况,根据项目配置以及环境,选择合适的容器,才能更好的搭建项目。

    区别Tomcat和Jetty

    • Tomcat和Jetty都是一种Servlet引擎,可以将它们比作为中国与美国的关系,虽然Jetty正常成长为一个优秀的Servlet引擎,但是目前的Tomcat的地位仍然难以撼动。相比较来看,它们都有各自的优点和缺点。Tomcat经过长时间的发展,它已经广泛地被市场接收和认可,相对jetty来说Tomcat更加成熟,在企业级应用方面也是更胜一筹。但是随着Jetty的发展,Jetty的市场份额也在不断提高;
    • Jetty的机构比Tomcat简单。Jetty的设计是基于Handler设计的,易于扩展;Tomcat的设计是基于容器设计的,进行扩展需要了解Tomcat的整体设计结构,不易扩展;
    • Jetty和Tomcat性能方面差异不大。Jetty可以同时处理大量连接而且可以长时间保持连接,适合于Web聊天应用等等。Jetty的架构简单,因此作为服务器,Jetty可以按需加载组件,减少不需要的组件,减少了服务器内存开销,从而提高服务器性能。Jetty默认采用非阻塞IO(NIO),在处理I/O请求上更占优势,在处理静态资源时,性能较高。Tomcat适合处理少量非常繁忙的连接,也就是说连接生命周期短的话,Tomcat的总体性能更高。另外,Tomcat默认采用的时阻塞IO(BIO)处理I/O请求,在处理静态资源时,性能较差

    Jetty相关属性

    server:
      jetty:
        accesslog:
          enabled: true # 是否打开jetty日志
          dir:  # 访问日志所在目录
        max-threads: 200 # 最大线程数(默认200)
        min-threads: 8 # 最小线程数(默认8)
        thread-idle-timeout: 2000 # 线程最大空闲时间
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    启动类效果如下

    在这里插入图片描述

    聊聊Undertow

    Undertow介绍

    1. Undertow是红帽公司开发的一款基于NIO的高性能Web嵌入式服务器
    2. Undertow的特点:
      • 轻量级:由两个核心jar包组成,加载一个Web应用可以小于10MB内存
      • Servelet3.1支持
      • WebSocket支持:对WebSocket完全支持,用以满足Web应用巨大数量的客户端
      • 嵌套性:不需要容器,只需通过API即可快速搭建Web服务器

    SpringBoot集成Undertow

    <dependency>
       <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-webartifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-tomcatartifactId>
            exclusion>
        exclusions>
    dependency>
    <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-undertowartifactId>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    常用配置参数

    server:
      undertow:
        # 设置IO线程数,主要执行非阻塞的任务,它们会负责多个连接,默认设置每个CPU核心一个线程
        # 不要设置过大,如果过大,启动项目会报错
        # CPU有几核,就填写几
        io-threads: 32
        # 阻塞任务线程池, 当执行类似servlet请求阻塞IO操作, undertow会从这个线程池中取得线程
        # 它的值设置取决于系统线程执行任务的阻塞系数,默认值是IO线程数*8
        worker-threads: 2000
        # 以下的配置会影响buffer,这些buffer会用于服务器连接的IO操作,有点类似netty的池化内存管理
        # 每块buffer的空间大小,越小的空间被利用越充分,不要设置太大,以免影响其他应用,合适即可
        buffer-size: 1024
        # 是否分配的直接内存(NIO直接分配的对外内存)
        direct-buffers: true
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    启动类启用效果

    在这里插入图片描述

  • 相关阅读:
    运动颈挂式蓝牙耳机推荐,推荐几款适合佩戴的骨传导耳机
    前端实现文件预览(pdf、excel、word、图片)
    【n子棋】
    力扣-228. 汇总区间
    PMP_第2章章节试题
    C++ 实现KMP字符串匹配算法
    时间是主观的,每个人对时间的感受都不同#Exploration of Time - 时间的探索
    机器学习入门(六)神经网络初识
    大数据-之LibrA数据库系统告警处理(ALM-12052 TCP临时端口使用率超过阈值)
    Python 的基本数据类型
  • 原文地址:https://blog.csdn.net/qq_42582773/article/details/127427903