期待どおりに動作するように、非常に基本的なアンダートーの例はありません。次のコードでは、同時HTTP要求を処理できるようにする必要があります。実際には、1つのリクエストしか処理されず、最初のリクエストが完了するまで他のリクエストは処理できません。ディスパッチアンダーフローのブロック操作が機能していません
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();
}
}
私は何が欠けていますか?
私はChromeを使用してGETリクエストを行い、リクエストが送信された後にデバッガを一時停止しました。そして、クローム要求を完全に提供された後、curlコマンドのみを返しcurl
コマンド
curl http://localhost:8080
を発行しました。
私はHTTP
とHTTPS
リスナーの両方でテストしています。
XNIOスレッド数とそのワーカーを増やしても何も変更されません。ランダムなXNIOが要求に割り当てられます。次に、無作為労働者が派遣された後に割り当てられます。要求が処理されるまで、サーバーはブロックされたままです。
コードは大丈夫です。エラーはありますか?動作?どのようにテストしましたか?あなたのHTTPクライアントは何ですか? – Azeem
エラーはありません。 ChromeからGETリクエストを発行すると、他のリクエストは終了するまでブロックされます。 –
ブラウザがビジー状態になっていますか?同時リクエストはどうですか? – Azeem