2

我正在用 JAVA 编写一个程序,以将大量 XML 文档发布到特定的网址,此外还有大量与此问题无关的其他数据处理。唯一的麻烦是,我预计要处理大约 90,000 条记录。在 POST 一个 XML 文档时,每条记录大约需要 10 秒,其中 9 秒是在 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 );
4

2 回答 2

1

我看到了你的问题。

使用仅读取标头的策略对您不起作用,因为问题不是由于服务器作为响应发送的大量数据造成的。问题是服务器需要很长时间来处理您的客户端发送的数据,因此即使发送一个简短的 ack 响应也需要很长时间。

您要的是异步响应。答案是 AJAX,我的首选是 GWT。

GWT 提供了三种与服务器执行异步通信的方法。

  • GWT RPC
  • 请求生成器
  • javascript包括
  • MVP ClientFactory/EventBus

请阅读我的描述

但是,您可能更喜欢使用 JQuery,我对它知之甚少。

于 2011-06-15T05:25:48.473 回答
0

我宁愿使用 Apache HttpComponents。它使您无需读取响应正文,而仅读取您显然需要的标头。

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

文档的那部分有一个只读取响应的几个字节的示例。

于 2011-06-14T22:31:30.980 回答