我有一个Android应用程序通过Volley向服务器发送请求:
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);
}
我已确认服务器正在接收和处理请求。该请求仅在某个事件发生时返回(另一个应用程序发送的请求导致服务器返回&#34; 41&#34;响应),并且运行正常。
问题是如果第二个应用程序在5分钟内没有发送请求,那么第一个应用程序会遇到VolleyError。即使会话超时设置为30分钟,也是如此:
<session-config>
<session-timeout>
60
</session-timeout>
</session-config>
这里的任何人都知道为什么会这样吗?我已经在Tomcat中用Google搜索了五分钟,但无法找到任何内容。我还搜索了服务器配置文件,寻找300000,300和600(五分钟毫秒,秒和分钟),并且没有配置任何这些值。我错过了什么?我已经花了将近一个星期的时间,而且它有点老了。
答案 0 :(得分:0)
五分钟超时来自Apache服务器,而不是Tomcat。在我将Apache httpd.conf文件中的Timeout设置从600更改为-1后,我得到了无限超时,我正在寻找。