Restlet Client 2.2 - 带回调的非阻塞异步请求

时间:2014-08-06 22:51:41

标签: asynchronous callback restlet restlet-2.0

我只是在使用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?我缺少什么,我需要另一个连接器,还是我必须自己为请求定义一个单独的线程?

1 个答案:

答案 0 :(得分:1)

我快速回答,已经创建了一个问题:https://github.com/restlet/restlet-framework-java/issues/943

最初,使用内部nio连接器可以支持异步。 由于此连接器未完全稳定,因此决定将其从核心模块中提取出来并将其暴露在专用的org.restlet.ext.nio模块中。 这解释了为什么您的代码阻塞,因为当前的内部连接器(在2.2和2.3分支中)都不支持它。

此时,使用nio扩展可以获得支持,但此扩展尚未完全稳定。所以我们不倾向于鼓励你使用它。 我们正在研究另一种情况,我们依赖Jetty提供的客户端连接器。 请继续关注。