【问题标题】:Vertx client gets clientabort exceptionVertx 客户端获取 clientabort 异常
【发布时间】:2017-06-04 18:25:59
【问题描述】:

在通过 vertx 应用程序内的 https 客户端调用休息服务时,我在服务器端收到 clientabort sockettimeout 读取异常。如果我调用 http setvice,它可以正常工作。

我在 vertx 中得到 200 ok 并且没有取回任何数据。而且我在vertx中也得到了连接关闭错误。

知道为什么会这样。帮助表示赞赏。

代码:

final HttpClient httpClient1 = vertx.createHttpClient(
    new HttpClientOptions()
    .setDefaultHost("localhost")
    .setDefaultPo‌​rt(8443)
    .setSsl(true‌​)
    .setKeepAlive(true)‌
    ​.setMaxPoolSize(100)‌​
    .setTrustAll(true)
    );
‌​HttpClientRequest req = httpClient1.request(HttpMethod.POST, "/api/test/");
req.headers()
    .set("Content-Length","10000000")‌​
    .set("Content-Type",‌​"application/json")
    .‌​set("Cache-Control", "no-transform, max-age=0");
Buffer body=Buffer.buffer("Hello World");
req.write(body);

【问题讨论】:

  • 请分享您的代码。
  • 最终 HttpClient httpClient1 = vertx.createHttpClient(new HttpClientOptions().setDefaultHost("localhost").setDefaultPort(8443).setSsl(true).setKeepAlive(true).setMaxPoolSize(100).setTrustAll( true));HttpClientRequest req = httpClient1.request(HttpMethod.POST, "/api/test/");req.headers().set("Content-Length","10000000").set("Content-Type" ,"application/json").set("Cache-Control", "no-transform, max-age=0");缓冲区主体=Buffer.buffer("Hello World");req.write(body);
  • 为什么将Content-Length 设置为10000000?它必须等于身体的大小。你在request 上调用end 方法吗?

标签: https vert.x


【解决方案1】:

这不是发送请求的方式。
希望工作示例可以帮助您。

服务器:

    final Vertx vertx = Vertx.vertx();

    vertx.createHttpServer().requestHandler((c) -> {

        c.bodyHandler(b -> {
            System.out.println(b.toString());
        });
        c.response().end("ok");
    }).listen(8443);

客户:

    final HttpClient client = vertx.createHttpClient(
            new HttpClientOptions()
                    .setDefaultHost("localhost")
                    .setDefaultPort(8443));


    client.request(HttpMethod.POST, "/", (r) -> {
        System.out.println("Got response");
    }).putHeader("Content-Length", Integer.toString("Hello".length()))
             .write("Hello").end();

两个重要说明:.request() 必须以.end() 结尾,并且必须正确设置Content-Length

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-15
    • 1970-01-01
    • 1970-01-01
    • 2014-02-12
    • 1970-01-01
    • 1970-01-01
    • 2011-04-18
    相关资源
    最近更新 更多