欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot如何使用Undertow做服務器

 更新時間:2022年07月07日 11:04:02   作者:蕓靈fly  
這篇文章主要介紹了SpringBoot如何使用Undertow做服務器,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

使用Undertow做服務器

說明

undertow,jetty和tomcat可以說是javaweb項目當下最火的三款服務器,tomcat是apache下的一款重量級的服務器,不用多說歷史悠久,經得起實踐的考驗。

然而:當下微服務興起,spring boot ,spring cloud 越來越熱的情況下,選擇一款輕量級而性能優(yōu)越的服務器是必要的選擇。

spring boot 完美集成了tomcat,jetty和undertow,本文將通過對jetty和undertow服務器的分析以及測試,來比較兩款服務器的性能如何。

值得一提的是jetty和undertow都是基于NIO實現的高并發(fā)輕量級的服務器,支持servlet3.1和websocket。所以,有必要先了解下什么是NIO。

NIO(非阻塞式輸入輸出)

  • Channel
  • Selector
  • Buffer
  • Acceptor

Client和Server只向Buffer讀寫數據不關注數據的流向,數據通過Channel通道進行流轉。而Selector是存在與服務端的,用于Channel的注冊以此實現數據I/O操作。Acceptor負責接受所以的連接通道并且注冊到Channel中。而整個過程客戶端與服務端是非阻塞的也就是異步操作。

下面是壓力測試對比:

服務器命中成功率吞吐量平均耗時
Jetty11488100%96.25 trans/sec0.00sec
18393100%153.92 trans/sec0.01sec
2148499.99%179.51 trans/sec0.01sec
Undertow11280100%94.02 trans/sec0.00sec
19442100%163.35 trans/sec0.01sec
23277100%195.54 tran/sec0.01sec
Tomcat10845100%90.95 trans/sec0.02sec
2167399.98%181 trans/sec0.01sec
2508499.98%209.10 trans/sec0.01sec

從中可以看出在高負載下Undertow的吞吐量高于Jetty而且隨著壓力增大Jetty和Undertow成功率差距會拉大。而在負載不是太大情況下服務器處理能力差不多,jetty還略微高于Undertow。而tomcat的負載能力似乎和Undertow很接近。

對比三個服務器發(fā)現在Undertow在負載過重情況下比Jetty和Tocmat更加頑強,實踐證明在負載繼續(xù)加大情況下Undertow的成功率高于其它兩者,但是在并發(fā)不是太大情況下三款服務器整體來看差別不大。

快速開始

更新pom.xml文件:

        <!--<dependency>-->
            <!--<groupId>org.springframework.boot</groupId>-->
            <!--<artifactId>spring-boot-starter-web</artifactId>-->
        <!--</dependency>-->
 
        <!-- 下面的配置將使用undertow來做服務器而不是tomcat -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-undertow</artifactId>
        </dependency>

application.yml配置:

server:
  port: 8081
  # 下面是配置undertow作為服務器的參數
  undertow:
    # 設置IO線程數, 它主要執(zhí)行非阻塞的任務,它們會負責多個連接, 默認設置每個CPU核心一個線程
    io-threads: 4
    # 阻塞任務線程池, 當執(zhí)行類似servlet請求阻塞操作, undertow會從這個線程池中取得線程,它的值設置取決于系統(tǒng)的負載
    worker-threads: 20
    # 以下的配置會影響buffer,這些buffer會用于服務器連接的IO操作,有點類似netty的池化內存管理
    # 每塊buffer的空間大小,越小的空間被利用越充分
    buffer-size: 1024
    # 是否分配的直接內存
    direct-buffers: true

配置比較簡單,和tomcat使用基本一樣,然后就可以快樂的使用undertow啦~

undertow警告Buffer pool was not set on WebSocketDeploymentInfo

看提示讓你設置一下buffer pool,不然他就使用默認的

這個警告不影響使用,但是看著別扭,于是

根據官方文檔,和源碼,自定義配置

/**
?* 功能描述:
?*
?* @author liuchaoyong
?* @version 1.0
?* @date 2019-05-26 21:41
?*/
@Component
public class CustomizationBean implements WebServerFactoryCustomizer<UndertowServletWebServerFactory> {
?
? ? @Override
? ? public void customize(UndertowServletWebServerFactory factory) {
? ? ? ? factory.addDeploymentInfoCustomizers(deploymentInfo -> {
? ? ? ? ? ? WebSocketDeploymentInfo webSocketDeploymentInfo = new WebSocketDeploymentInfo();
? ? ? ? ? ? webSocketDeploymentInfo.setBuffers(new DefaultByteBufferPool(false, 1024));
? ? ? ? ? ? deploymentInfo.addServletContextAttribute("io.undertow.websockets.jsr.WebSocketDeploymentInfo", webSocketDeploymentInfo);
? ? ? ? });
? ? }
}

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。 

相關文章

  • 淺談利用Session防止表單重復提交

    淺談利用Session防止表單重復提交

    這篇文章主要介紹了淺談利用Session防止表單重復提交,簡單介紹表單重復提交的情況,分析,以及解決方法代碼示例,具有一定借鑒價值,需要的朋友可以了解下。
    2017-12-12
  • java客戶端線上Apollo服務端的實現

    java客戶端線上Apollo服務端的實現

    這篇文章主要介紹了java客戶端線上Apollo服務端的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-08-08
  • Java中BEAN與EJB的區(qū)別淺析

    Java中BEAN與EJB的區(qū)別淺析

    這篇文章主要介紹了Java中BEAN與EJB的區(qū)別淺析,本文總結了它們之間的不同之處,需要的朋友可以參考下
    2015-03-03
  • Spring Cloud多個微服務之間調用代碼實例

    Spring Cloud多個微服務之間調用代碼實例

    這篇文章主要介紹了Spring Cloud多個微服務之間調用代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-12-12
  • Kotlin基礎教程之伴生對象,getter,setter,內部,局部,匿名類,可變參數

    Kotlin基礎教程之伴生對象,getter,setter,內部,局部,匿名類,可變參數

    這篇文章主要介紹了Kotlin基礎教程之伴生對象,getter,setter,內部,局部,匿名類,可變參數的相關資料,需要的朋友可以參考下
    2017-05-05
  • netty?pipeline中的inbound和outbound事件傳播分析

    netty?pipeline中的inbound和outbound事件傳播分析

    這篇文章主要為大家介紹了netty?pipeline中的inbound和outbound事件傳播分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • 新版SpringSecurity安全配置說明

    新版SpringSecurity安全配置說明

    這篇文章主要介紹了新版SpringSecurity安全配置說明,在 Spring Security 5.7.0-M2 中,我們棄用了WebSecurityConfigurerAdapter,因為我們鼓勵用戶轉向基于組件的安全配置,需要的朋友可以參考下
    2023-07-07
  • 理解HashSet里為什么value不是null

    理解HashSet里為什么value不是null

    你有沒有想過Java中HashSet的Value為什么要存PRESENT而不是Null?帶著這個疑問來看下邊的文章尋找答案吧
    2021-09-09
  • JAVA正則表達式及字符串的替換與分解相關知識總結

    JAVA正則表達式及字符串的替換與分解相關知識總結

    今天給大家?guī)淼氖顷P于Java的相關知識總結,文章圍繞著JAVA正則表達式及字符串的替換與分解展開,文中有非常詳細的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • Java基礎詳解之內存泄漏

    Java基礎詳解之內存泄漏

    這篇文章主要介紹了Java基礎詳解之內存泄漏,文中有非常詳細的代碼示例,對正在學習java的小伙伴們有很好地幫助,需要的朋友可以參考下
    2021-04-04

最新評論