Vert.x HTTP客户端
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。