Was könnte dazu führen, dass Socket ConnectException: Zeitüberschreitung bei der Verbindung auftritt?

Wir haben einen Webstart-Client, der mit dem Server kommuniziert, indem er serialisierte Objekte über HTTPS mit @ sendejava.net.HttpsURLConnection.

Alles funktioniert einwandfrei auf meinem lokalen Computer und auf Testservern in unserem Büro, aber ich habe ein sehr, sehr seltsames Problem, das nur auf unseren Produktions- und Staging-Servern auftritt (und das gelegentlich). Der Hauptunterschied, den ich zwischen diesen Servern und denen in unserem Büro kenne, besteht darin, dass sie sich an einem anderen Ort befinden und die Client-Server-Kommunikation mit ihnen erheblich langsamer ist, aber es hat lange Zeit in der Produktion einwandfrei funktioniert.

Anyway, hier ist was passiert:

Der Client, nachdem Optionen wie das Zeitlimit für das Lesen und Eigenschaften wie @ festgelegt wurdContent-Type auf derHttpURLConnection, AnrufegetOutputStream() darauf, um den Stream zum Schreiben abzurufen.u diesem Zeitpunkt hängt der Client, soweit ich das beurteilen kann, für einige Zei Der Client löst dann die folgende Ausnahme aus:
java.net.ConnectException: Connection timed out: connect
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(Unknown Source)
    at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
    at java.net.PlainSocketImpl.connect(Unknown Source)
    at java.net.SocksSocketImpl.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.connect(Unknown Source)
    at com.sun.net.ssl.internal.ssl.BaseSSLSocketImpl.connect(Unknown Source)
    at sun.net.NetworkClient.doConnect(Unknown Source)
    at sun.net.www.http.HttpClient.openServer(Unknown Source)
    at sun.net.www.http.HttpClient.openServer(Unknown Source)
    at sun.net.www.protocol.https.HttpsClient.(Unknown Source)
    at sun.net.www.protocol.https.HttpsClient.New(Unknown Source)
    at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)
    at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(Unknown Source)
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(Unknown Source)

Bitte beachten Sie, dass dies kein @ iSocketTimeoutException, welches dasconnect() Methode aufHttpURLConnection gibt an, dass es ausgelöst wird, wenn das Timeout abläuft, bevor eine Verbindung hergestellt werden kann. In diesem Fall kann ich auch @ anrufeconn.getResponseCode() und ich erhalte einen Antwortcode von 200.

uf der Serverseite einEOFException wird in @ geworfObjectInputStreamer Konstruktor von @, der versucht, den Serialisierungsheader zu lesen, aber fehlschlägt, weil der Client niemals das @ erhäOutputStream schreiben an.

Wenn es hilft, werden hier die Anrufe auf dem @ getätiHttpsURLConnection vor dem Aufruf vongetOutputStream() (bearbeitet, um nur die getätigten Aufrufe und nicht die gesamte Struktur des Codes anzuzeigen):

HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
conn.setUseCaches(false);
conn.setReadTimeout(30000);
conn.setRequestProperty("Cookie", cookie);
conn.setDoOutput(true);
conn.setRequestProperty("Content-Type", "application/x-java-serialized-object");
conn.getOutputStream();

Die Sache ist, ich habe keine Ahnung, wie das alles passieren könnte, zumal es nur passiertgelegentlic (kein klares Aktivitätsmuster, das ich erkennen kann) und selbst dann nur, wenn zwischen Client und Server eine (relativ) hohe Latenz besteht.

Gegeben, was ich bisher über @ finden konnjava.net.ConnectException: Connect timed out, Ich habe mich gefragt, ob es nicht irgendein Netzwerk- oder Firewall-Problem im Netzwerk gibt, auf dem unsere Server ausgeführt werden. Aber das macht für mich keinen Sinn, da die Anforderung eindeutig an das Servlet weitergeleitet wird. Andere Apps, die im selben Netzwerk ausgeführt werden, haben ähnliche Probleme nicht gemeldet.

Hat jemand eine Idee, woran das liegen könnte oder was ich untersuchen sollte?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage