Как установить время ожидания подключения в Google App Engine? - PullRequest
1 голос
/ 08 сентября 2011

Я использую следующие строки для получения веб-страницы из 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 ]

2 голосов
/ 08 сентября 2011

GAE / J предлагает два API:

Вариант 1. API java.net , где вы можете использовать класс URLConnection (или HttpURLConnection ):

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

Опция 2. GAE API низкого уровня предлагает метод FetchOptions#setDeadline для установки крайнего срока для запроса на выборку.

В качестве третьего варианта вы также можете использовать определенную библиотеку, такую ​​как HttpClient , но вам придется проверить, работает ли эта библиотека с внутренними ограничениями GAE / J.

HttpParams httpParams = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParams, connectionTimeoutMillis);
HttpConnectionParams.setSoTimeout(httpParams, socketTimeoutMillis);
HttpClient httpClient = new DefaultHttpClient(httpParams);
1 голос
/ 09 сентября 2011

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));
0 голосов
/ 09 сентября 2011

Используете ли вы GAE / J SDK 1.4? Если это так, то время ожидания очереди задач составляет 30 секунд вместо обещанных 10 минут. Я считаю, что вам нужно что-то изменить в файле queue.xml. Также вы можете посмотреть этот mail-архив

0 голосов
/ 09 сентября 2011

Чтобы установить время ожидания, вы должны использовать API низкого уровня .Для этого создайте экземпляр HttpRequest, вызовите getFetchOptions() для него и вызовите setDeadline для возвращаемого объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...