繁体   English   中英

如何使用超时调用Restlet中的异步HTTP客户端

[英]How to call asynchronous HTTP client in Restlet with timeout

我到处寻找这个,我找不到答案。 我甚至看到了一本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

问题当然是这会阻止resource.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!!

有人可以告诉我该怎么做吗? 谢谢。

看一下下面的讨论,它讨论了可能导致问题的两个问题。

http://restlet-discuss.1400322.n2.nabble.com/Using-Asynch-setOnResponse-td7578750.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM