2017-12-01 10 views
0

gesetzt ich einen Android-App, die eine Anfrage an den Server über Volley sendet:Session Timeout nach 5 Minuten, obwohl die Session-Timeout-Parameter auf 30

 private void waitForForfeit(final String user_id, final String accessToken) { 
     String url = ""; 

     RequestQueue queue = Volley.newRequestQueue(activity); 

     try { 
      url = "https://www.chiaramail.com:443/GameServer/GameServer?user_ID=" + URLEncoder.encode(user_id, "UTF-8") + "&token=" + URLEncoder.encode(accessToken, "UTF-8") + "&cmd=" + URLEncoder.encode("WAITFOR FORFEIT ", "UTF-8") + "&parms=" + URLEncoder.encode(user_id, "UTF-8"); 
     } catch (UnsupportedEncodingException e) { 
      Toast.makeText(activity, getString(R.string.wait_forfeit_error) + e.getMessage(), Toast.LENGTH_LONG).show(); 
      spinner.setVisibility(View.INVISIBLE); 
      waitForForfeit(user_id, accessToken); 
     } 

     StringRequest stringRequest = new StringRequest(Request.Method.GET, url, 
       new Response.Listener<String>() { 
        @Override 
        public void onResponse(String response) { 
         if (!response.startsWith("41 ")) { 
          queue_builder.setMessage(getString(R.string.wait_forfeit_error) + " " + response); 
          queue_alert = queue_builder.create(); 
          queue_alert.show(); 
         } else { 
          forfeitAlert.show(); 
         } 
        } 
       }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
       volleyError = error; 
       Toast.makeText(activity, getString(R.string.wait_forfeit_error) + volleyError.getMessage(), Toast.LENGTH_LONG).show(); 
       waitForForfeit(user_id, accessToken); 
      } 
     }); 
     stringRequest.setRetryPolicy(new DefaultRetryPolicy(
       60*1000*60, 
       DefaultRetryPolicy.DEFAULT_MAX_RETRIES, 
       DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); 

// Add the request to the RequestQueue. 
     queue.add(stringRequest); 
    } 

Ich habe, dass die Anfrage bestätigt wird vom Server korrekt empfangen und verarbeitet. Die Anforderung wurde so konzipiert, dass sie nur zurückgegeben wird, wenn ein bestimmtes Ereignis aufgetreten ist (eine andere Anwendung sendet eine Anforderung, die dazu führt, dass der Server eine "41" -Antwort zurückgibt), und diese wird ordnungsgemäß ausgeführt.

Das Problem ist, dass, wenn die zweite App ihre Anfrage nicht innerhalb von 5 Minuten sendet, dann die erste App einen VolleyError erlebt. Dies ist, auch wenn die Session-Timeout auf 30 Minuten festgelegt ist:

<session-config> 
    <session-timeout> 
     60 
    </session-timeout> 
</session-config> 

Wer hier eine Ahnung, warum dies geschieht? Ich habe für fünf Minuten in Tomcat gegoogelt und konnte nichts finden. Ich grepped auch die Server Config-Dateien, auf der Suche nach 300000, 300 und 600 (fünf Minuten in ms, Sekunden und Minuten) und es war nichts mit einem dieser Werte konfiguriert. Was vermisse ich? Ich habe fast eine Woche damit verbracht und es wird langsam alt.

Antwort

0

Das Fünf-Minuten-Timeout erfolgt vom Apache-Server, nicht von Tomcat. Nachdem ich die Timeout-Einstellung in der Apache-Datei httpd.conf von 600 auf -1 geändert habe, bekam ich das unbegrenzte Zeitlimit, nach dem ich gesucht habe.