Vert.x HTTP客户端

时间:2020-01-09 10:47:20  来源:igfitidea点击:

Vert.x包含一个HTTP客户端,可以轻松地异步发出HTTP请求。请记住,Vert.x中的每个IO操作都必须异步执行,以避免阻塞事件循环。事件循环是管理顶点及其处理程序的线程。 Java的内置URL和URLConnection不是异步的,因此我们不应在Vert.x应用程序中使用这些类。

创建一个HTTP客户端

我们可以这样创建一个Vert.x HTTP客户端:

HttpClient httpClient = vertx.createHttpClient();

从Verticle内部创建Vert.x HTTP客户端时,它看起来像这样:

public class VertxHttpClientVerticle extends AbstractVerticle {

    @Override
    public void start() throws Exception {
        HttpClient httpClient = vertx.createHttpClient();
    }
}

发送GET请求

一旦创建了Vert.x HTTP客户端,就可以使用其getNow()方法发送GET请求。这是Vert.x的HttpClient的getNow()示例:

httpClient.getNow(80, "theitroad.local", "/", new Handler<HttpClientResponse>() {

    @Override
    public void handle(HttpClientResponse httpClientResponse) {
        System.out.println("Response received");
    }
});

" getNow()"方法的第一个参数是用于连接到远程HTTP服务器的TCP端口。 getNow()方法存在于一个版本中,我们可以其中忽略该端口。然后,该端口将默认为端口80,这是HTTP协议的默认TCP端口。

getNow()方法的第二个参数是要连接的远程HTTP服务器的域名。请注意,域名前面没有" http://"。 Vert.x HTTP客户端知道这是一个HTTP请求,因此我们无需在域名中包含协议。

getNow()方法的第三个参数是要检索的资源的URI。上面的示例检索网站的首页(" /")。另一个URI可能是" /vert.x/index.html"。

第四个参数是" Handler"实现,当收到HTTP请求的响应时调用该实现。下面说明如何处理HTTP响应。

处理HTTP响应

收到HTTP响应的标头时,将调用传递给getNow()方法的Handler实现。如果不需要访问响应主体,则可以在此处理程序中处理响应。

但是,如果确实需要访问HTTP响应的主体,则需要在HttpClientResponse上注册另一个处理程序,该处理程序作为参数传递给第一个Handler处理程序的handle()方法。看起来是这样的:

httpClient.getNow(80, "theitroad.local", "/", new Handler<HttpClientResponse>() {

    @Override
    public void handle(HttpClientResponse httpClientResponse) {

        httpClientResponse.bodyHandler(new Handler<Buffer>() {
            @Override
            public void handle(Buffer buffer) {
                System.out.println("Response (" + buffer.length() + "): ");
                System.out.println(buffer.getString(0, buffer.length()));
            }
        });
    }
});

当收到完整的HTTP响应正文时,将调用传递给HttpClientResponse的bodyHandler()方法的Handler实现。

作为参数传递给主体Handler的Buffer包含完整的HTTP响应。

更多方法

HttpClient包含许多用于发送GET,POST,PUT,DELETE和HEAD请求的方法。它还包含更多选项,用于使用默认配置" HttpClient",以及在接收到响应正文时(而不是在接收到整个正文时)异步,增量地异步处理HTTP响应。有关这些选项的更多信息,请参见Vert.x JavaDoc。