我只是在使用Restlet Client Api 2.2进行测试,但我没有获得带有回调功能的非阻塞异步请求。我已经广泛搜索过了 但实际上没有找到(工作)非阻塞解决方案的答案。
我有以下两种方法:
方法1(客户 - 请求):
Client c = new Client(Protocol.HTTP);
Request r = new Request(Method.GET, url);
System.out.println("START1");
c.handle(r, new Uniform() {
@Override
public void handle(Request request, Response response) {
int statusCode = response.getStatus().getCode();
System.out.println(statusCode);
}
});
System.out.println("START2");
方法2(ClientResource - setOnResponse() - get()):
ClientResource cr = new ClientResource(url);
cr.setOnResponse(new Uniform() {
@Override
public void handle(Request request, Response response) {
int statusCode = response.getStatus().getCode();
System.out.println(statusCode);
}
});
System.out.println("START1");
cr.get();
System.out.println("START2");
两种方法的控制台输出始终为:
START1
Starting the internal HTTP client
在这里等待
200
START2
任何人都可以给我一个提示,让其中一种方法无阻塞吗?是否可以使用Restlet API?我缺少什么,我需要另一个连接器,还是我必须自己为请求定义一个单独的线程?
答案 0 :(得分:1)
我快速回答,已经创建了一个问题:https://github.com/restlet/restlet-framework-java/issues/943
最初,使用内部nio连接器可以支持异步。 由于此连接器未完全稳定,因此决定将其从核心模块中提取出来并将其暴露在专用的org.restlet.ext.nio模块中。 这解释了为什么您的代码阻塞,因为当前的内部连接器(在2.2和2.3分支中)都不支持它。
此时,使用nio扩展可以获得支持,但此扩展尚未完全稳定。所以我们不倾向于鼓励你使用它。 我们正在研究另一种情况,我们依赖Jetty提供的客户端连接器。 请继续关注。