"일반"html 페이지뿐 아니라 큰 파일도 제공하는 HTTP-Server (Netty 사용)를 구현하려고합니다. 따라서, 내 파이프 라인 내에 HttpContentCompressor
뿐만 아니라 ChunkedWriteHandler
을 사용하고 싶습니다.Netty - ChunkedWriteHandler와 HttpContentCompressor를 결합하는 방법
pipeline.addLast("decoder", new HttpRequestDecoder());
pipeline.addLast("aggregator", new HttpObjectAggregator(1048576));
pipeline.addLast("encoder", new HttpResponseEncoder());
pipeline.addLast("chunkedWriter", new ChunkedWriteHandler());
pipeline.addLast("deflater", new HttpContentCompressor());
pipeline.addLast(new NettyHandler());
NettyHandler
는이 계획 다음 : 다음과 같이
현재,이 파이프 라인이 초기화 나는/요청 (내 테스트 파일은 약 500 바이트입니다) 작은 파일을 보낼 경우
@Override
public void channelRead(final ChannelHandlerContext context, final Object message) throws Exception {
try {
if (message instanceof HttpRequest) {
final HttpRequest request = (HttpRequest) message;
final HttpContext httpContext = new HttpContext(request, context);
final ChannelFuture future = handleHttpMessage(httpContext);
httpContext.closeOn(future);
}
} finally {
ReferenceCountUtil.release(message);
}
}
private ChannelFuture handleHttpMessage(final HttpContext context) {
//writing to the wire via ChannelHandlerContext.write(...)
return context.getChannelContext().writeAndFlush(LastHttpContent.EMPTY_LAST_CONTENT);
}
을, 모든 것이 잘 작동합니다. 그러나 요청한 파일이 커질수록 (350MB 정도의 테스트 파일) 브라우저는 크롬과 파이어 폭스로 테스트 한 결과받은 신체의 인코딩 된 부분에 관한 문제를보고합니다. 크롬 ERR_CONTENT_DECODING_FAILED
라고, 파이어 폭스는 source file could not be read
같은 것을 말한다.
나는 근본적으로 잘못된 것을하고 있습니까? 실시간으로 파이프 라인을 조작해야합니까? 어떤 도움을 주셔서 미리 감사드립니다!
up2date를 자원 : https://github.com/eclipse/이 매우 간단하다 vert.x/blob/master/src/main/java/io/vertx/core/http/impl/HttpChunkContentCompressor.java –