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

Asynchronous Restlet Client 2.2-带回调的非阻塞异步请求,asynchronous,callback,restlet,restlet-2.0,Asynchronous,Callback,Restlet,Restlet 2.0,我只是使用Restlet客户端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 Unifor

我只是使用Restlet客户端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");
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");
方法2(ClientResource-setOnResponse()-get()):

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");
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
有人在这里等着


有人能给我一个提示,让这些方法中的一种成为非阻塞的吗?对于restletapi,这可能吗?我缺少什么,我需要另一个连接器,还是我必须自己为请求定义一个单独的线程

我快速回答,出现了一个问题:

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

此时,可以使用nio扩展提供支持,但该扩展尚未完全稳定。因此,我们不打算鼓励您使用它。 我们正在研究另一个场景,其中依赖Jetty提供的客户端连接器。
请继续关注。

我的环境版本是2.0.8,设置了无阻塞响应。我希望您提到的稳定性问题不会成为我们的问题,因为我确实希望启用客户端异步功能。