Ich benutze com.sun.net.httpserver.HttpServer, um einen kleinen Container zum Testen von Bits von Servercode zu erstellen, und habe Probleme damit, mehr als einen Thread zur Bearbeitung von Anfragen zu verwenden.Wie bekomme ich HttpServer, um mehrere HttpHandlers parallel zu erstellen?
Ich rufe java.util.concurrent.Executors.newFixedThreadPool (20) auf, um einen java.util.concurrent.ThreadPoolExecutor mit 20 Threads zu erstellen. Dann setze ich diesen Executor auf dem HttpServer. Mit Jmeter feuere ich 20 Client-Threads ab, um eine Anforderung an die einzige HttpHandler-Implementierung auf dem Server zu senden. Das Handler funktioniert ein System.out.println (this) und ich diese Ausgabe zu sehen:
Started TestServer at port 8800
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
Ich dachte, ich 20 sehen würde (oder fast 20) verschiedene Threads hier verwendet werden. Hier ist der Code.
Ich möchte, dass der HttpServer mehrere TestHandler parallel erstellt, um die mehreren gleichzeitigen Anfragen zu bedienen. Was fehlt mir hier?
(BTW, das ist ganz ähnlich wie Can I make a Java HttpServer threaded/process requests in parallel?, obwohl die Antwort auf diese Frage ist ein Vollstrecker zu verwenden, die ich bereits tue. Dank.)
Ist es möglich, dass jede Anfrage schnell genug bearbeitet wird, damit der Executor denselben Thread weiterverwenden kann? Können Sie Ihrem Handler etwas Verzögerung hinzufügen, um zu sehen, ob sich etwas ändert? – elevine
@elevine: Ich habe darüber nachgedacht, also ein 'Thread.sleep (1000)' zu TestHandler.handle (HttpExchange) hinzugefügt. Gleiches Ergebnis. Vielen Dank. – Michael