Last active
September 13, 2015 17:47
-
-
Save vkosh/f53d7dc821a86074a2cc to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
AsyncServer asyncServer = new AsyncServer(); | |
AsyncHttpServer httpServer = new AsyncHttpServer(); | |
AsyncHttpClient httpClient = new AsyncHttpClient(asyncServer); | |
httpServer.get(".*", new HttpServerRequestCallback() { | |
@Override | |
public void onRequest(final AsyncHttpServerRequest request, final AsyncHttpServerResponse response) { | |
final AsyncHttpGet proxyRequest = new AsyncHttpGet("http://remotehost/" + request.getPath()); | |
String remoteHost = proxyRequest.getHeaders().get("Host"); | |
proxyRequest.getHeaders().addAll(request.getHeaders()); | |
proxyRequest.getHeaders().set("Host", remoteHost); | |
httpClient.executeByteBufferList(proxyRequest, new AsyncHttpClient.DownloadCallback() { | |
@Override | |
public void onCompleted(Exception e, final AsyncHttpResponse proxyResponse, ByteBufferList result) { | |
if (e != null) { | |
response.getHeaders().addAll(proxyResponse.headers()); | |
response.code(proxyResponse.code()); | |
response.end(); | |
return; | |
} | |
// do some result transformations | |
final int contentLength = result.remaining(); | |
final String contentType = proxyResponse.headers().get("Content-Type"); | |
response.getHeaders().addAll(proxyResponse.headers()); | |
response.getHeaders().set("Content-Length", Integer.toString(contentLength)); | |
response.setContentType(contentType); | |
response.code(proxyResponse.code()); | |
// XXX: this leads to 100% CPU consumption on large content (> 1 MB) | |
/* | |
response.write(result); | |
response.end(); | |
*/ | |
// XXX: this works OK | |
Util.writeAll(response, result, new CompletedCallback() { | |
@Override | |
public void onCompleted(Exception ex) { | |
response.end(); | |
} | |
}); | |
} | |
}); | |
} | |
}); | |
httpServer.listen(asyncServer, 0); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment