如何在Google App Engine中设置连接超时?

时间:2011-09-08 18:27:07

标签: java google-app-engine timeout

我使用以下几行从GAE获取网页,但是如何提高超时限制需要很长时间?

try
{
  URL url=new URL(Url + "?r=" + System.currentTimeMillis());
  BufferedReader reader = new BufferedReader(
                          new InputStreamReader(url.openStream()));

  while ((line=reader.readLine())!=null) { Result += line + "\n"; }
  reader.close();
}
catch (MalformedURLException e) { ... }
catch (IOException e) { ... }

4 个答案:

答案 0 :(得分:2)

GAE / J提供两种API:

选项1。 java.net API ,您可以在其中使用URLConnection(或HttpURLConnection)类:

URLConnection conn = url.openConnection();
conn.setConnectTimeout(timeoutMs);
conn.setReadTimeout(timeoutMs);

选项2。 GAE Low Level API 提供FetchOptions#setDeadline方法来设置获取请求的截止日期。

作为第三种选择,您还可以使用特定的库,例如HttpClient,但您必须检查该库是否与GAE / J的固有限制一起使用。

HttpParams httpParams = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParams, connectionTimeoutMillis);
HttpConnectionParams.setSoTimeout(httpParams, socketTimeoutMillis);
HttpClient httpClient = new DefaultHttpClient(httpParams);

答案 1 :(得分:1)

url.openStream()只是调用openConnection().getInputStream()的快捷方式,但无法设置正确的超时语句。

您应该使用openConnection()方法,而不是这样:

URL url=new URL(Url+"?r="+System.currentTimeMillis());
URLConnection conn = url.openConnection();
conn.setConnectTimeout(timeoutMs);
conn.setReadTimeout(timeoutMs);
in = conn.getInputStream();
BufferedReader reader=new BufferedReader(new InputStreamReader(in));

答案 2 :(得分:0)

要设置超时,您必须使用low level API。为此,请实例化HttpRequest,在其上调用getFetchOptions(),然后在返回的对象上调用setDeadline

答案 3 :(得分:0)

您使用的是GAE / J SDK 1.4吗?如果是这样,那么任务队列在30秒内超时,而不是承诺的10分钟。我相信你需要在queue.xml文件中更改一些内容。您也可以查看mail-archive