Undertow webコンテナ
10140 ワード
Undertow webコンテナ一、Undertow紹介 、undetowを使う 2.1、依存追加 2.2、起動クラスに、undewtow-server bean を配置する。 2.3、Tomcat起動ログ出力を比較する 2.4、HTTP 2.0へのサポート 2.5、undetowを配置する 、undetowの深度 一、Undertow紹介
Undertowは、赤ずきんが開発したNIOベースの高性能Web埋め込みサーバーです。
赤ずきん(RedHat)のオープンソース製品で、WildFly 8(JBoos)のデフォルトのWebサーバーです。公式サイトAPIは、Undertow:Undertow is a flexible performant web server written in java、providing both blocking and non-blocking API's based on NIO.訳文:Undadtowはjavaで編纂されたフレキシブルな高機能のWebサーバで、NIOのブロックを提供します。 公式サイトAPIのまとめ特徴: まとめ:1、UndertowはWebサーバであり、Servlet、JSP、ファイルサーバ、プロキシサーバ、セキュリティ認証などの現代Webサーバの基本的な特性が必要である。understowは現在、圧倒的多数の機能を実現しており、また、WildflyはJavaEE 7 TCK認証を通過したため、つまりServlet 3.1を通じて認証されたWebサーバとコンテナであり、最新バージョンはservlet 4.0にも対応している。2、Undertowの設計の目的はwebサーバとして使用するためです。現在、多くのJavaと他の言語のオープンソースプロジェクトは、小型のweb serverを組み込んで、サービス能力を提供しています。出力でもいいです。REST方式のjsonテキストを出力することもできます。HTTP(s)プロトコルをサポートしており、多くのアプリケーションが必要を満たすことができます。3、デフォルトの場合Spring CloudはTomcatをインラインServlet容器として使用して、TomcatのSpring Bootプログラムを起動して、Under towのSpring BootプログラムとVisual VMツールで比較して、Undertowの性能がTomcatより優れていることが分かります。4、公式サイトの参考:http://undertow.io
二、アンダードレッドを使う
2.1、依存追加
2.2、スタートクラスに、undewtow-server beanを配置する
2.4、HTTP 2.0へのサポート
参考:https://segmentfault.com/a/1190000013644784
2.5、under towを配置する
まず簡単に埋め込まれたWebServerのコードの例を見てください。
このプログラムにはWebサーバが埋め込まれています。本機の8080ポートを開けて、要求を受け付けます。ブラウザが接続されていると、純粋なテキスト「Hello World」を送ります。
Http ServerExchangeはすべてのコンテキスト状態情報を携帯しています。このクラスも現在のunder towの中で一番長いコードです。2000行以上あります。requestとレスポンスに関する情報も含まれており、get Request Headers()/gets RespnseHeaders()により対応するヘッダ情報を取得することができます。
Undertow類は入り口点であり、builderからパラメータが入ることでWebコンテナを構築する。
上記の例:APIすなわちio.under tow.Undertowを使用するのが一番簡単です。もう一つは、XNIOとUndertowトランシーバー類を直接使ってサーバーを組み立てることです。この方法を使うにはもっと多くのコードが必要ですが、より多くの柔軟性を与えます。ほとんどの場合、APIを通じて構築すればいいです。
参考:http://blog.hubwiz.com/2016/12/01/webserver-Undertow/ https://blog.csdn.net/fayeyiwang/article/details/54729514
Undertowは、赤ずきんが開発したNIOベースの高性能Web埋め込みサーバーです。
赤ずきん(RedHat)のオープンソース製品で、WildFly 8(JBoos)のデフォルトのWebサーバーです。
Lightweight( )
Undertow ,Undertow jar 1Mb 。 , 4Mb
HTTP Upgrade Support( http )、HTTP/2 Support
HTTP , HTTP
HTTP 2.0
Web Socket Support( WebScoket)
Undertow Web Socket , JSR-356
Servlet 4.0
Undertow Servlet 4.0 , , servlet 。 Servlet Undertow
Embeddable( )
Undertow ,
Flexible( )
Undertow jar : undertow-core.jar undertow-servlet.jar
二、アンダードレッドを使う
2.1、依存追加
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-tomcat
org.springframework.boot
spring-boot-starter-undertow
注意:アンダードレーを導入するには、後に並べばロードに失敗します。2.2、スタートクラスに、undewtow-server beanを配置する
@EnableFeignClients
@EnableDiscoveryClient
@SpringBootApplication
@EntityScan("com.sunred.framework.domain.course")//
@ComponentScan(basePackages={"com.sunred.api"})//
@ComponentScan(basePackages={"com.sunred.manage_course"})
@ComponentScan(basePackages={"com.sunred.framework"})// common
public class ManageCourseApplication {
public static void main(String[] args) throws Exception {
SpringApplication.run(ManageCourseApplication.class, args);
}
@Bean // undertow server spring-context , tomcat
public ServletWebServerFactory servletContainer() {
UndertowServletWebServerFactory tomcat = new UndertowServletWebServerFactory();
return tomcat;
}
}
2.3、Tomcat起動ログ出力を比較する========= undertow =========================
2019-07-23 22:37:21.926 [main] DEBUG o.s.b.w.s.f.OrderedRequestContextFilter - Initializing filter 'requestContextFilter'
2019-07-23 22:37:21.928 [main] DEBUG o.s.b.w.s.f.OrderedRequestContextFilter - Filter 'requestContextFilter' configured successfully
2019-07-23 22:37:21.928 [main] DEBUG o.s.b.w.s.f.OrderedHttpPutFormContentFilter - Initializing filter 'httpPutFormContentFilter'
2019-07-23 22:37:21.928 [main] DEBUG o.s.b.w.s.f.OrderedHttpPutFormContentFilter - Filter 'httpPutFormContentFilter' configured successfully
2019-07-23 22:37:21.928 [main] DEBUG o.s.b.w.s.f.OrderedHiddenHttpMethodFilter - Initializing filter 'hiddenHttpMethodFilter'
2019-07-23 22:37:21.928 [main] DEBUG o.s.b.w.s.f.OrderedHiddenHttpMethodFilter - Filter 'hiddenHttpMethodFilter' configured successfully
2019-07-23 22:37:21.928 [main] DEBUG o.s.b.w.s.f.OrderedCharacterEncodingFilter - Initializing filter 'characterEncodingFilter'
2019-07-23 22:37:21.928 [main] DEBUG o.s.b.w.s.f.OrderedCharacterEncodingFilter - Filter 'characterEncodingFilter' configured successfully
2019-07-23 22:37:21.992 [main] INFO o.s.b.w.e.u.UndertowServletWebServer - Undertow started on port(s) 31200 (http) with context path ''
2019-07-23 22:37:21.993 [main] INFO o.s.c.n.e.s.EurekaAutoServiceRegistration - Updating port to 31200
2019-07-23 22:37:21.995 [main] INFO c.x.m.ManageCourseApplication - Started ManageCourseApplication in 9.859 seconds (JVM running for 10.944)
2019-07-23 22:37:35.612 [XNIO-2 task-1] INFO io.undertow.servlet - Initializing Spring FrameworkServlet 'dispatcherServlet'
2019-07-23 22:37:35.613 [XNIO-2 task-1] INFO o.s.web.servlet.DispatcherServlet - FrameworkServlet 'dispatcherServlet': initialization started
2019-07-23 22:37:35.632 [XNIO-2 task-1] INFO o.s.web.servlet.DispatcherServlet - FrameworkServlet 'dispatcherServlet': initialization completed in 19 ms
2019-07-23 22:37:35.640 [XNIO-2 task-1] DEBUG o.s.b.w.s.f.OrderedRequestContextFilter - Bound request context to thread: HttpServletRequestImpl [ GET / ]
2019-07-23 22:37:35.668 [XNIO-2 task-1] DEBUG o.s.b.w.s.f.OrderedRequestContextFilter - Cleared thread-bound request context: HttpServletRequestImpl [ GET / ]
2019-07-23 22:37:35.803 [XNIO-2 task-2] DEBUG o.s.b.w.s.f.OrderedRequestContextFilter - Bound request context to thread: HttpServletRequestImpl [ GET /favicon.ico ]
======= tomcat =======
2019-07-23 22:45:42.156 [main] INFO o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-31200"]
2019-07-23 22:45:42.164 [main] INFO o.a.tomcat.util.net.NioSelectorPool - Using a shared selector for servlet write/read
2019-07-23 22:45:42.182 [main] INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port(s): 31200 (http) with context path ''
2019-07-23 22:45:42.183 [main] INFO o.s.c.n.e.s.EurekaAutoServiceRegistration - Updating port to 31200
2019-07-23 22:45:42.185 [main] INFO c.x.m.ManageCourseApplication - Started ManageCourseApplication in 10.445 seconds (JVM running for 11.686)
2019-07-23 22:46:55.193 [http-nio-31200-exec-1] INFO o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring FrameworkServlet 'dispatcherServlet'
2019-07-23 22:46:55.194 [http-nio-31200-exec-1] INFO o.s.web.servlet.DispatcherServlet - FrameworkServlet 'dispatcherServlet': initialization started
2019-07-23 22:46:55.235 [http-nio-31200-exec-1] INFO o.s.web.servlet.DispatcherServlet - FrameworkServlet 'dispatcherServlet': initialization completed in 41 ms
2019-07-23 22:46:55.251 [http-nio-31200-exec-1] DEBUG o.s.b.w.s.f.OrderedRequestContextFilter - Bound request context to thread: org.apache.catalina.connector.RequestFacade@44c8bbdb
2019-07-23 22:46:55.327 [http-nio-31200-exec-1] DEBUG o.s.b.w.s.f.OrderedRequestContextFilter - Cleared thread-bound request context: org.apache.catalina.connector.RequestFacade@44c8bbdb
2019-07-23 22:46:55.342 [http-nio-31200-exec-2] DEBUG o.s.b.w.s.f.OrderedRequestContextFilter - Bound request context to thread: org.apache.catalina.connector.RequestFacade@44c8bbdb
2019-07-23 22:46:55.353 [http-nio-31200-exec-2] DEBUG o.s.b.w.s.f.OrderedRequestContextFilter - Cleared thread-bound request context: org.apache.catalina.connector.RequestFacade@44c8bbdb
2019-07-23 22:46:55.362 [http-nio-31200-exec-5] DEBUG o.s.b.w.s.f.OrderedRequestContextFilter - Bound request context to thread: org.apache.catalina.connector.RequestFacade@44c8bbdb
重要な情報を見ることができます。undetowは19 msスタートします。tomcatは41 msスタートします。これも一つの面から見て、undetowはライト級が多いです。2.4、HTTP 2.0へのサポート
参考:https://segmentfault.com/a/1190000013644784
2.5、under towを配置する
# Undertow
server.undertow.accesslog.dir
#
server.undertow.accesslog.enabled=false
#
server.undertow.accesslog.pattern=common
#
server.undertow.accesslog.prefix=access_log
#
server.undertow.accesslog.suffix=log
# HTTP POST
server.undertow.max-http-post-size=0
# IO , , , CPU
server.undertow.io-threads=4
# , servlet , undertow ,
server.undertow.worker-threads=20
# buffer, buffer IO , netty
# buffer ,
server.undertow.buffer-size=1024
# buffer , pool buffer-size * buffers-per-region
server.undertow.buffers-per-region=1024
#
server.undertow.direct-buffers=true
三、アンダードレッドの深化まず簡単に埋め込まれたWebServerのコードの例を見てください。
public class HelloWorldServer {
public static void main(final String[] args) {
Undertow server = Undertow.builder()
.addHttpListener(8080, "localhost")
.setHandler(new HttpHandler() { // HttpHandler
@Override
public void handleRequest(final HttpServerExchange exchange) throws Exception {
exchange.getResponseHeaders().put(Headers.CONTENT_TYPE, "text/plain");
exchange.getResponseSender().send("Hello World");
}
}).build();
server.start();
}
}
under towの中で、最も主要なインターフェースはHttpHandlerで、XNIOの中のChanelListenerの概念と似ています。HttpHandlerも一つの方法しかありません。パラメータはHttpServerExchangeです。このプログラムにはWebサーバが埋め込まれています。本機の8080ポートを開けて、要求を受け付けます。ブラウザが接続されていると、純粋なテキスト「Hello World」を送ります。
Http ServerExchangeはすべてのコンテキスト状態情報を携帯しています。このクラスも現在のunder towの中で一番長いコードです。2000行以上あります。requestとレスポンスに関する情報も含まれており、get Request Headers()/gets RespnseHeaders()により対応するヘッダ情報を取得することができます。
Undertow類は入り口点であり、builderからパラメータが入ることでWebコンテナを構築する。
上記の例:APIすなわちio.under tow.Undertowを使用するのが一番簡単です。もう一つは、XNIOとUndertowトランシーバー類を直接使ってサーバーを組み立てることです。この方法を使うにはもっと多くのコードが必要ですが、より多くの柔軟性を与えます。ほとんどの場合、APIを通じて構築すればいいです。
参考:http://blog.hubwiz.com/2016/12/01/webserver-Undertow/ https://blog.csdn.net/fayeyiwang/article/details/54729514