Je ne peux pas obtenir l'exemple Undertow très basique pour fonctionner comme prévu. Le code suivant doit permettre aux demandes HTTP simultanées d'être servies. Ce qui se passe en réalité, c'est qu'une seule demande est traitée et qu'aucune autre demande ne peut être traitée tant que la première n'est pas terminée.Les opérations de blocage de sous-dépotage avec dispatch ne fonctionnent pas
public class MainUT {
public static void main(String[] args) {
Undertow.builder()
.addHttpListener(8080, "localhost")
.setHandler(new HttpHandler() {
@Override
public void handleRequest(final 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().start();
}
}
Que manque-t-il?
J'ai utilisé Chrome pour effectuer une requête GET et j'ai mis le débogueur en veille après l'envoi de la demande. Puis émis une commande curl
curl http://localhost:8080
La commande boucle retourne seulement après la demande Chrome est complètement servi.
Je le test sur les deux HTTP
et HTTPS
auditeurs. Augmenter le nombre de threads XNIO et leurs travailleurs ne change rien. Un XNIO aléatoire est affecté à la demande. Ensuite, un travailleur aléatoire est affecté après l'envoi. Le serveur reste bloqué jusqu'à ce que la demande soit servie.
Votre code a l'air correct. Des erreurs? Comportement? Comment l'avez-vous testé? Quel est votre client HTTP? – Azeem
Aucune erreur. Lors de l'émission d'une requête GET à partir de Chrome, toutes les autres demandes sont bloquées jusqu'à la fin. –
Votre navigateur est-il occupé? Comment êtes-vous des demandes simultanées? – Azeem