Ich verwende einen einfachen Http-Server von com.sun.net.httpserver
, wie in simple HTTP server in Java using only Java SE API beschrieben.Stop HttpServer nach Anfrage werden
Alles funktioniert gut, aber ich bin mir nicht sicher, wie ich den Server sauber herunterfahren kann, sobald ich ihn nicht mehr brauche. Ich möchte den Server nicht stoppen, während er noch die Daten für eine Anfrage sendet, nur wenn er sich im Leerlauf befindet.
Mein spezielles Szenario ist eine Desktop-Anwendung, die OAuth Tanz durchführt. Ich verwende einen lokalen Webserver, der in der Anwendung eingebettet ist, um eine Rückrufantwort bereitzustellen. Die Anwendung startet einen Desktopbrowser, um die Serverantwort mithilfe der API java.awt.Desktop.browse
anzuzeigen.
Ich habe versucht, HttpServer.stop(0)
direkt aus meiner HttpHandler.handle
Funktion aufrufen, nachdem ich die Antwort-Seite in die HttpExchange
Antwortausgabestrom geschrieben haben, aber das ist zu früh, der Browser zeigt ERR_EMPTY_RESPONSE
.
Das gleiche geschieht, wenn ich den Server stoppe, sobald meine Hauptanwendung ihre Arbeit beendet hat - das ist oft zu früh, die HttpServer
hat das Senden der Daten in diesem Moment noch nicht abgeschlossen.
Ich könnte ein paar Sekunden Verzögerung Wert zu stoppen, aber ich möchte eine ordnungsgemäße und saubere Synchronisation erreichen.
Was ist eine geeignete Lösung?
können Sie einfach eine Anfrage an den Server senden - Befehl shutdown, nachdem der Kunde alle Daten akzeptiert? –
@SashaSalauyou Das hört sich interessant an. Allerdings ist der Client in diesem Fall ein Desktop-Webbrowser, und ich habe keine Kontrolle darüber, abgesehen von der Webseite, die ich ihm diene. Vielleicht könnte es eine Möglichkeit geben, einige Daten von der Seite mit Hilfe von Javascript zu senden, aber selbst wenn dies der Fall ist, was ist, wenn das Javascript auf dem server.server deaktiviert/nicht unterstützt wird, vielleicht mit Javascri – Suma