在HttpClient postAbs Vert.x中获得2分钟后的响应

时间:2016-12-13 12:27:12

标签: websocket java-8 httpclient vert.x

我正在使用如下的Eventbus,并使用vert.x调用HttpClient.postAbs()

 public void start(Future<Void> fut) {
    EventBus eb1 = MainAdminVx.serviceBack.getEventBus();
    eb1.consumer("local-message-receiver", message -> {

         HttpClient client = vertx.createHttpClient();

         client.postAbs("http://external-server-address/test@xyz.com/activityIn?activityId=5", r -> {
             r.bodyHandler(b -> System.out.println(b.toString() +  r.statusCode() )
                      ).exceptionHandler(t -> System.err.println(t.getMessage()));
            })
              .putHeader("content-length", "1000")
              .putHeader("userId", "test@xyz.com")
              .putHeader("Content-Type", "application/json")
              .putHeader("Accept", "application/json")
              .write("some text")
              .exceptionHandler(System.err::println)
              .end();


    });

}

有什么我想念的吗?或者还有另一种方法可以做到这一点...因为我在postAbs中2分钟后得到了回复,同样的POST请求在邮递员中很快就会有效。

提前致谢!!!

1 个答案:

答案 0 :(得分:0)

我们只需要设置

  

setChunked(真)

它就像一个魅力!!!

  

由于我已将内容长度设置为“1000”,因此服务器将等到收到1000个字节,即使您没有发送任何内容并在之后回复。它表示HTTP正文的确切字节长度。通常它用于HTTP 1.1,以便接收方知道当前响应/请求何时完成,因此连接可以重用于另一个请求。

那么什么是Chunked transfer:

  

分块传输编码是超文本传输​​协议(HTTP)1.1版中的数据传输机制,其中数据以一系列“块”发送。它使用Transfer-Encoding HTTP标头代替Content-Length标头,而协议的早期版本则需要该标头。由于未使用Content-Length标头,因此发送方在开始向接收方发送响应之前不需要知道内容的长度。发件人可以在知道该内容的总大小之前开始传输动态生成的内容。

或者,可以省略内容长度并且可以使用分块编码,或者如果两者都丢失,则在响应结束时必须关闭连接。

我希望这能帮助你理解Http块概念。