2016-07-21 25 views
0

Beim Konfigurieren des eingebetteten Jetty-Servers in Jetty 9.3.8 füge ich dem Server-Connector einen Verbindungs-Listener hinzu, um das Öffnen und Schließen der Jetty HttpConnection zu verfolgen.So schließen Sie die Jetty-HTTP-Verbindung, nachdem die Web-Service-Methode ausgeführt wurde

Der Jetty-Thread [qtp ..........], der aktuelle Anfrage bedient, öffnet eine HttpConnection. Nachdem ich die aktuelle Anfrage beendet habe, wie informiere ich die Anlegestelle, diese HttpConnection zu schließen. Ich sehe das Schließen aller geöffneten Verbindungen in dem Rückruf von dem Listener von anderen Clients nach einiger Zeit des Bereitstellens der Anforderung.

Ich muss die Verbindung schließen, sobald ich mit der Anfrage fertig bin, das ist, wenn ich mit einem bestimmten Client fertig bin.

Antwort

0

Das Schließen der Verbindung unterliegt der HTTP-Spezifikation und dem HTTP-Protokoll.

Hinweis: Beachten Sie, dass die Verbindung schließen HTTP-Version spezifisch ist, folgende unterschiedliche Semantik für HTTP/1.0 vs HTTP/1.1 vs HTTP/2

Im Allgemeinen ist die Verbindung zum Öffnen/Schließen Handhabung ausgehandelt zwischen dem HTTP-Client und dem HTTP-Server und muss diesen Regeln folgen. Wenn der Server die Verbindung basierend auf einem bestimmten HTTP-Spezifikationsverhalten willkürlich schließt, ist dies für Missbrauch anfällig und führt zu Problemen mit Intermediären (z. B. Proxies, Routern, Load Balancern, Caching-Servern usw.).

+0

HTTP/1.1 wird in diesem Fall verwendet. Wenn ich nur den Thread abbringe, auf dem die Anfrage verarbeitet wird, sehe ich, dass die HttpConnection-Verbindung wie erwartet stattfindet. Aber wenn Jetty den gleichen Thread [qtp ..........] für eine andere Anfrage zuweist, sehe ich eine http-Verbindung geschlossen und auf dem http-Client bekomme ich die 'no http response'. Wie kann ich nur das Interrupt-Flag des Threads und andere Daten zwischen Anfragen löschen? –

+0

Sie sollten sich nicht mit dem Teil der Verarbeitung einer Verbindung und Anforderung beschäftigen. Außerdem wird das Unterbrechen eines beliebigen Threads in einem Servlet-Container zu 100% von der Servlet-Spezifikation (und JEE) nicht unterstützt und führt garantiert zu Problemen. –

+0

Ich rüste von 9.2.8 auf 9.3.8 auf. Anfangs in der vorherigen Version, benutzen wir um den Jetty-Thread nach der Anfrage zu unterbrechen (im Falle von langlebigen Herzschlag-Threads), was uns half, das niedrige Level zu schließen Jetty Http Verbindungen. Aber nach dem Entfernen des Interrupts auf diesem Ausgabe-Thread gibt das System nicht die erwartete Leistung. Alles, was mir dabei helfen kann. –

0

Versuchen Sie, diesen Header in der Anfrage zu setzen: Verbindung: schließen