vertx Router no response

218 Views Asked by At

I wrote a dispatcher which routing a request to backend server, and response from backend is encrypted. When I decrypt the response body and write to RoutingContext response. Client can't receive response.

code like below

Router router;
router.routeWithRegex(patter).failureHandler(this::onFailure).handler(this::onRequest);

private void onRequest(Routing context){
  ...
  HttpClient client = vertx.createHttpClient(new HttpClientOptions());
  HttpClientRequest requestToBackend =
            client.request(method, port, backendHost, uri, backendRsp -> onBackendResponse(context, backendRsp));
  context.request().handler(body -> handleReq(requestToBackend));
  context.request().endHandler((v) -> requestToBackend.end());
}

private void onBackendResponse(RoutingContext context, io.vertx.core.http.HttpClientResponse backendRsp) {
    ....
    backendRsp.handler(data -> {
        byte[] decrypt = decrypt(data);
        context.request().response().write(data);     // this works fine
        // context.request().response().write(Buffer.buffer(decrypt)); // change to this, client can't receive response then
    });
    backendRsp.endHandler((v) -> context.request().response().end());
}

1

There are 1 best solutions below

0
On

finally worked out, I changed the response body (shorter than origin), but not modify the header "content-length". so client keep waiting..