Ich experimentiere mit HTTP/2
client von jdk 9-ea+171
. Der Code stammt aus diesem Beispiel :
Aber der Klient hängt für immer an der letzten Zeile. Bitte beraten Sie, wie Sie es beheben können?
Das Debugging zeigt an, dass es in der Methode waitUntilPrefaceSent()
unendlich wartet.
Dies ist ein Fehler in der letzten Build-Implementierung einer HTTP2-Verbindung. Es tritt nicht mit vorherigen Builds auf.
Zunächst müssen Sie die GET
-Methode angeben, um zu vermeiden, dass eine Nullzeigerausnahme auftritt.
Was passiert ist, dass der Haupt-Thread darauf wartet, dass das Verbindungs-Vorwort gesendet wird. Es sperrt einen Countdown-Latch, um auf den Empfang dieses Vorworts zu warten. Um sich selbst zu wecken, erstellt HttpClient
einen Hilfsthread, der eingehenden Datenverkehr liest. Dieser Thread soll den Haupt-Thread aufwecken, aber manchmal passiert das nie. Wenn Sie Ihr Beispiel oft genug ausführen, werden Sie sehen, dass dies manchmal funktioniert. Ich denke, es gibt ein Wettrennen um das Vorwort zu lesen.
Leider werden beim Lesen des Vorworts auch keine Zeitüberschreitungen berücksichtigt. Es gibt also keine Möglichkeit, den Haupt-Thread aufzuwecken, außer den Haupt-Thread zu unterbrechen.
Hier ist ein offizielles Ticket: Ссылка