•
WebFlux 는 크게 두 부분으로 구성된다.
◦
publisher 생성 부분
◦
publisher subscribe 부분
•
이 두 부분은 reactor.netty.http.server 패키지의 HttpServer$onStateChange 메서드에서 실행된다.
◦
Publisher<Void> publisher = (Publisher)this.handler.apply(ops, ops);
◦
mono.subscribe(ops.disposeSubscriber());
HttpWebHandlerAdapter
•
publisher 생성 핵심 클래스
•
handle 호출되는 과정
◦
this.handler.apply(ops, ops) → ReactorHttpHandlerAdapter$apply 호출
▪
ReactorHttpHandlerAdapter 에서는 request 와 response 를 생성
ReactorServerHttpRequest request = new ReactorServerHttpRequest(reactorRequest, bufferFactory);
ServerHttpResponse response = new ReactorServerHttpResponse(reactorResponse, bufferFactory);
JavaScript
복사
◦
this.httpHandler.handle(request, response) → WebServerManager$DelayedInitializationHttpHandler$handle 호출
◦
this.delegate.handle(request, response) → HttpWebHandlerAdapter$handle 호출
•
exchange 생성
ServerWebExchange exchange = this.createExchange(request, response);
JavaScript
복사
•
ExceptionHandlingWebFilter, FilteringWebHandler → extends WebHandlerDecorator
•
DefaultWebFilterChain$filter 에서 Mono.defer(() → {}) 로 Mono defer 를 만든다.
DispatcherHandler
•
subscribe 핵심 클래스
•
subscribe 하면 DefaultWebFilterChain$filter {} 안의 handler.handle() 로 DispatcherHandler 가 호출됨.