2016-06-17 8 views
0

Ich stoße auf ein Problem, bei dem verschiedene Stellen in meiner Anwendung, die HTTP- und FTP-Verbindungen betreffen, auf java.net.SocketInputStream.socketRead0 endlos hängen bleiben (stundenlang beobachtet, bevor der Java-Prozess beendet wird).Kann ich das standardmäßige globale Java Socket Timeout festlegen?

Ich möchte global das Standard-Socket-Timeout von 0 überschreiben, so dass ich es nicht an jedem einzelnen Ort, an dem ich eine Verbindung initiiere, einstellen muss. Gibt es eine globale Java-Eigenschaft oder Methode, die ich aufrufen kann, um das Standard-Socket-Timeout auf etwas anderes als 0 zu setzen?

+0

hmm jetzt können Sie 'statische final' Variable in einem global zugegriffen Ort definieren und verwenden, um den Anruf zu vermeiden insgesamt hmm ich weiß nicht, aber ich glaube nicht, so etwas gibt – niceman

Antwort

-1

Es hängt davon ab, wie Sie den Code geschrieben haben. Aus meiner Sicht sollten Sie einen APIClient erstellt haben, der die http/ftp-Anrufe durchführt und die Antwort an die Anruferfunktion zurückgibt. Das heißt, jeder http/ftp-Aufruf muss diese APIClient-Datei durchlaufen. Es ist gut, einen Klassenparameter/eine Konstante zu haben, die das Timeout in ms speichert und dann diese Konstante als Timeout verwendet, während ein http/ftp-Aufruf durchgeführt wird.

public abstract class WebServiceAPIClient { 
    protected String authUser; 
    protected String authPassword; 
    // Set the connection timeout whatever you want... 
    final Integer connectionTimeOut = 60000; 

    public WebServiceAPIClient(String user, String pwd, int errorCode) { 
     this.authUser = user; 
     this.authPassword = pwd; 
     this.errorIdentiferCode = errorCode; 
    } 

    public String requestRESTGet(String url, List<Integer> successCodes, boolean addBasicAuth) throws CloudWebServiceInvocationException { 
    Long start = System.currentTimeMillis(); 
    HttpGet get = new HttpGet(url); 
    DefaultHttpClient client = getHttpClient(); 
    try { 
     if (addBasicAuth) 
      addHeaders(get); 
     HttpResponse response = client.execute(get); 
     return responseAsString(response); 
    } catch (ClientProtocolException e) { 
     internalServerError(e); 
    } catch (IOException e) { 
     internalServerError(e); 
    } finally { 
     client.getConnectionManager().shutdown(); 
    } 
    return ""; 
} 

    protected DefaultHttpClient getHttpClient() { 
    DefaultHttpClient client = new DefaultHttpClient(); 
    HttpParams params = client.getParams(); 
    if (this.connectionTimeOut != null) { 
     HttpConnectionParams.setConnectionTimeout(params, this.connectionTimeOut); 
     HttpConnectionParams.setSoTimeout(params, 3 * this.connectionTimeOut); 
    } 
    return client; 
} 

}

Verwandte Themen