最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot如何使用Undertow做服務(wù)器

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

使用Undertow做服務(wù)器

說(shuō)明

undertow,jetty和tomcat可以說(shuō)是javaweb項(xiàng)目當(dāng)下最火的三款服務(wù)器,tomcat是apache下的一款重量級(jí)的服務(wù)器,不用多說(shuō)歷史悠久,經(jīng)得起實(shí)踐的考驗(yàn)。

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

spring boot 完美集成了tomcat,jetty和undertow,本文將通過(guò)對(duì)jetty和undertow服務(wù)器的分析以及測(cè)試,來(lái)比較兩款服務(wù)器的性能如何。

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

NIO(非阻塞式輸入輸出)

  • Channel
  • Selector
  • Buffer
  • Acceptor

Client和Server只向Buffer讀寫數(shù)據(jù)不關(guān)注數(shù)據(jù)的流向,數(shù)據(jù)通過(guò)Channel通道進(jìn)行流轉(zhuǎn)。而Selector是存在與服務(wù)端的,用于Channel的注冊(cè)以此實(shí)現(xiàn)數(shù)據(jù)I/O操作。Acceptor負(fù)責(zé)接受所以的連接通道并且注冊(cè)到Channel中。而整個(gè)過(guò)程客戶端與服務(wù)端是非阻塞的也就是異步操作。

下面是壓力測(cè)試對(duì)比:

服務(wù)器命中成功率吞吐量平均耗時(shí)
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

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

對(duì)比三個(gè)服務(wù)器發(fā)現(xiàn)在Undertow在負(fù)載過(guò)重情況下比Jetty和Tocmat更加頑強(qiáng),實(shí)踐證明在負(fù)載繼續(xù)加大情況下Undertow的成功率高于其它兩者,但是在并發(fā)不是太大情況下三款服務(wù)器整體來(lái)看差別不大。

快速開(kāi)始

更新pom.xml文件:

        <!--<dependency>-->
            <!--<groupId>org.springframework.boot</groupId>-->
            <!--<artifactId>spring-boot-starter-web</artifactId>-->
        <!--</dependency>-->
 
        <!-- 下面的配置將使用undertow來(lái)做服務(wù)器而不是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作為服務(wù)器的參數(shù)
  undertow:
    # 設(shè)置IO線程數(shù), 它主要執(zhí)行非阻塞的任務(wù),它們會(huì)負(fù)責(zé)多個(gè)連接, 默認(rèn)設(shè)置每個(gè)CPU核心一個(gè)線程
    io-threads: 4
    # 阻塞任務(wù)線程池, 當(dāng)執(zhí)行類似servlet請(qǐng)求阻塞操作, undertow會(huì)從這個(gè)線程池中取得線程,它的值設(shè)置取決于系統(tǒng)的負(fù)載
    worker-threads: 20
    # 以下的配置會(huì)影響buffer,這些buffer會(huì)用于服務(wù)器連接的IO操作,有點(diǎn)類似netty的池化內(nèi)存管理
    # 每塊buffer的空間大小,越小的空間被利用越充分
    buffer-size: 1024
    # 是否分配的直接內(nèi)存
    direct-buffers: true

配置比較簡(jiǎn)單,和tomcat使用基本一樣,然后就可以快樂(lè)的使用undertow啦~

undertow警告Buffer pool was not set on WebSocketDeploymentInfo

看提示讓你設(shè)置一下buffer pool,不然他就使用默認(rèn)的

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

根據(jù)官方文檔,和源碼,自定義配置

/**
?* 功能描述:
?*
?* @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);
? ? ? ? });
? ? }
}

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。 

相關(guān)文章

  • 精通Java泛型的使用與原理

    精通Java泛型的使用與原理

    針對(duì)利用繼承來(lái)實(shí)現(xiàn)通用程序設(shè)計(jì)所產(chǎn)生的問(wèn)題,泛型提供了更好的解決方案,本文詳細(xì)的介紹了Java泛型的使用與原理,感興趣的可以了解一下
    2022-03-03
  • 圖解Java中插入排序算法的原理與實(shí)現(xiàn)

    圖解Java中插入排序算法的原理與實(shí)現(xiàn)

    插入排序的算法描述是一種簡(jiǎn)單直觀的排序算法。它的工作原理是通過(guò)構(gòu)建有序序列,對(duì)于未排序數(shù)據(jù),在已排序序列中從后向前掃描,找到相應(yīng)位置并插入。本文將通過(guò)圖片詳解插入排序的原理及實(shí)現(xiàn),需要的可以參考一下
    2022-08-08
  • 一招教你使用Java執(zhí)行g(shù)roovy腳本的兩種方式

    一招教你使用Java執(zhí)行g(shù)roovy腳本的兩種方式

    本文主要介紹了一招教你使用Java執(zhí)行g(shù)roovy腳本的兩種方式,一種是通過(guò)腳本引擎ScriptEngine提供的eval(String)方法執(zhí)行腳本內(nèi)容,一種是執(zhí)行g(shù)roovy腳本,感興趣的可以了解一下
    2023-09-09
  • idea中使用git合并分支實(shí)踐

    idea中使用git合并分支實(shí)踐

    這篇文章主要介紹了idea中使用git合并分支實(shí)踐,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • 簡(jiǎn)單的java圖片處理類(圖片水印 圖片縮放)

    簡(jiǎn)單的java圖片處理類(圖片水印 圖片縮放)

    本圖片處理類功能非常之強(qiáng)大可以實(shí)現(xiàn)幾乎所有WEB開(kāi)發(fā)中對(duì)圖像的處理功能都集成了,包括有縮放圖像、切割圖像、圖像類型轉(zhuǎn)換、彩色轉(zhuǎn)黑白、文字水印、圖片水印等功能
    2013-11-11
  • Java語(yǔ)法基礎(chǔ)之選擇結(jié)構(gòu)的if語(yǔ)句、switch語(yǔ)句詳解

    Java語(yǔ)法基礎(chǔ)之選擇結(jié)構(gòu)的if語(yǔ)句、switch語(yǔ)句詳解

    這篇文章主要為大詳細(xì)介紹了Java語(yǔ)法基礎(chǔ)之選擇結(jié)構(gòu)的if語(yǔ)句、switch語(yǔ)句,感興趣的小伙伴們可以參考一下
    2016-09-09
  • Java面試為何阿里強(qiáng)制要求不在foreach里執(zhí)行刪除操作

    Java面試為何阿里強(qiáng)制要求不在foreach里執(zhí)行刪除操作

    那天,小二去阿里面試,面試官老王一上來(lái)就甩給了他一道面試題:為什么阿里的 Java 開(kāi)發(fā)手冊(cè)里會(huì)強(qiáng)制不要在 foreach 里進(jìn)行元素的刪除操作
    2021-11-11
  • Java監(jiān)聽(tīng)器的作用及用法代碼示例

    Java監(jiān)聽(tīng)器的作用及用法代碼示例

    這篇文章主要介紹了Java監(jiān)聽(tīng)器的作用及用法代碼示例,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • SpringBoot項(xiàng)目中使用Sharding-JDBC實(shí)現(xiàn)讀寫分離的詳細(xì)步驟

    SpringBoot項(xiàng)目中使用Sharding-JDBC實(shí)現(xiàn)讀寫分離的詳細(xì)步驟

    Sharding-JDBC是一個(gè)分布式數(shù)據(jù)庫(kù)中間件,它不僅支持?jǐn)?shù)據(jù)分片,還可以輕松實(shí)現(xiàn)數(shù)據(jù)庫(kù)的讀寫分離,本文介紹如何在Spring Boot項(xiàng)目中集成Sharding-JDBC并實(shí)現(xiàn)讀寫分離的詳細(xì)步驟,需要的朋友可以參考下
    2024-08-08
  • java Scanner類的使用示例代碼

    java Scanner類的使用示例代碼

    這篇文章主要介紹了java Scanner類的使用,Scanner類還可以任意地對(duì)字符串和基本類型(如int和double)的數(shù)據(jù)進(jìn)行分析。借助于Scanner,可以針對(duì)任何要處理的文本內(nèi)容編寫自定義的語(yǔ)法分析器,感興趣的朋友跟隨小編一起看看吧
    2021-07-07

最新評(píng)論

江北区| 句容市| 津南区| 黄山市| 张家界市| 浦江县| 永修县| 石渠县| 什邡市| 漯河市| 光山县| 林芝县| 麻栗坡县| 阿坝| 宣化县| 吉林市| 和平县| 弥渡县| 巴东县| 明水县| 临猗县| 长汀县| 布尔津县| 建德市| 揭西县| 朝阳县| 逊克县| 彩票| 乌什县| 邯郸县| 西青区| 三河市| 陇南市| 泽库县| 叶城县| 旺苍县| 获嘉县| 绥宁县| 稻城县| 聂荣县| 南涧|