我使用以下几行从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) { ... }
答案 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