Можно ли игнорировать ответ от веб-сервера после команды POST? - PullRequest
2 голосов
/ 15 июня 2011

Я пишу программу на JAVA для размещения большого количества XML-документов по определенному веб-адресу, в дополнение к большому количеству другой обработки данных, которая не имеет никакого отношения к этому вопросу. Единственная проблема в том, что я ожидаю обработки около 90 000 записей. При отправке XML-документа каждая запись занимает приблизительно 10 секунд, 9 из которых - получение ответа от сервера после POST.

У меня вопрос: есть ли способ отправить данные POST на веб-сервер, а затем проигнорировать ответ сервера для экономии времени?

Вот фрагмент кода, который доставляет мне неприятности. Для перехода от «writer.close» к «con.getResponseCode ()»

требуется около 9 секунд в соответствии с системным таймером.
URL url = new URL(TargetURL);
con = (HttpsURLConnection) url.openConnection();


//Login with given credentials
String login = (Username)+":"+(Password);
String encoding = new sun.misc.BASE64Encoder().encode(login.getBytes());
con.setRequestProperty ("Authorization", "Basic " + encoding);

// specify that we will send output and accept input
con.setRequestMethod("POST");
con.setDoInput(true);
con.setDoOutput(true);

con.setConnectTimeout(20000) ;  // long timeout, but not infinite
con.setReadTimeout(20000);

con.setUseCaches (false);
con.setDefaultUseCaches (false);

// tell the web server what we are sending
con.setRequestProperty ( "Content-Type", "text/xml" );

OutputStreamWriter writer = new OutputStreamWriter( con.getOutputStream() );
writer.write(data);
writer.flush();
writer.close();

//****This is our problem.*****//
int result = con.getResponseCode();                 
System.err.println( "\nResponse from server after POST:\n" + result );

Ответы [ 2 ]

1 голос
/ 15 июня 2011

Я вижу вашу проблему.

Использование стратегии чтения только заголовка не будет работать для вас, потому что проблема не в том, что объем данных отправляется сервером в ответ. Проблема заключается в том, что серверу требуется много времени для обработки данных, отправленных вашим клиентом, и, следовательно, для отправки короткого ответного ответа требуется много времени.

То, что вы просите, - это асинхронный ответ. Ответ - AJAX, и я предпочитаю GWT.

GWT представляет три способа асинхронной связи с сервером.

  • GWT RPC
  • RequestBuilder
  • JavaScript включает
  • MVP ClientFactory / EventBus

Пожалуйста, прочитайте мое описание на

Но тогда вы можете предпочесть использовать JQuery, с которым у меня скудные и скудные знакомства.

0 голосов
/ 15 июня 2011

Я бы лучше использовал Apache HttpComponents. Это позволяет вам не читать тело ответа, а только заголовки, которые вам явно нужны.

http://hc.apache.org/httpcomponents-client-ga/tutorial/html/fundamentals.html#d4e143

Эта часть документов имеет пример только чтения нескольких байтов ответа.

...