Java – how does undertow do non blocking IO?
                                        
                    •
                    Java                                    
                I use undertow to create a simple application
public class App {
    public static void main(String[] args) {
        Undertow server = Undertow.builder().addListener(8080,"localhost")
                .setHandler(new HttpHandler() {
                    public void handleRequest(HttpServerExchange exchange) throws Exception {
                        Thread.sleep(5000);
                        exchange.getResponseHeaders().put(Headers.CONTENT_TYPE,"text/plain");
                        exchange.getResponseSender().send("Hello World");
                    }
                }).build();
        server.start();
    }
}
This time, the first tag will wait 5 seconds and the second will wait 10 seconds
Why is that?
Solution
HttpHandler is executing in the I / O thread As stated in the document:
Request lifecycle docs discusses how to send a request to a worker thread:
import io.undertow.Undertow;
import io.undertow.server.*;
import io.undertow.util.Headers;
public class Under {
  public static void main(String[] args) {
    Undertow server = Undertow.builder()
        .addListener(8080,"localhost")
        .setHandler(new HttpHandler() {
          public void handleRequest(HttpServerExchange exchange)
              throws Exception {
            if (exchange.isInIoThread()) {
              exchange.dispatch(this);
              return;
            }
            exchange.getResponseHeaders()
                    .put(Headers.CONTENT_TYPE,"text/plain");
            exchange.getResponseSender()
                    .send("Hello World");
          }
        })
        .build();
    server.start();
  }
}
I noticed that each request does not necessarily get a worker thread - when I set a breakpoint on the header, I have one thread per client There is a gap between undertow and underlying xnio docs, so I don't know what it means
                            The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
                        
                                            
                        THE END
                    
                    
                    
                                                        二维码
                        
                        
                                                
                        