java如何在Restlet中调用带超时的异步HTTP客户端
我到处寻找这个问题,但我找不到答案。我甚至看到了一本Restlet的书,它只给出了部分答案,甚至部分答案都是错误的
我想做的很简单。我需要对HTTP URL执行一个简单的GET请求。我知道如何同步进行:
Engine.getInstance().getRegisteredClients().clear();
Engine.getInstance().getRegisteredClients().add(new HttpClientHelper(null));
ClientResource resource=new ClientResource(url);
Representation rep=resource.get();
String respText=rep.getText();
// handle the response in respText as you see fit
当然,问题是这会阻塞资源。get()直到收到响应。我真正想做的是异步地做这件事,即设置回调(在使用resource.setOnResponse方法时?)然后在不阻塞的情况下发出请求。我还想设置一个超时值,这样如果我在合理的时间内没有收到超时,它就会触发某种onTimeout或onError方法
有人可能会认为这是一个非常常见的事情,有人可能想用Restlet来做,但我找不到任何文档来讨论这一点。我看到的唯一一个讨论是在Restlet手册中,清单9.2中说get()方法不会阻塞,而实际上它确实会阻塞。换句话说,我试过:
Engine.getInstance().getRegisteredClients().clear();
Engine.getInstance().getRegisteredClients().add(new HttpClientHelper(null));
ClientResource resource=new ClientResource(url);
resource.setOnResponse(new Uniform() {
public void handle(Request request, Response response) {
try {
int statusCode=response.getStatus().getCode();
// Print status code, should be 200
System.out.println("Status code is "+statusCode);
System.out.println("");
System.out.println("");
if (statusCode==200) {
onSuccess(response); // this is my own success handler method
} else {
System.out.println("ERROR: Bad response from server");
}
} catch (Exception ex) {
// handle exception
}
}
});
System.out.println("Before resource get");
resource.get(); // This blocks!!
有人能告诉我怎么做吗?谢谢
# 1 楼答案
看看下面的讨论,它讨论了可能导致问题的两个问题
http://restlet-discuss.1400322.n2.nabble.com/Using-Asynch-setOnResponse-td7578750.html