2012-02-24 3 views
0

나는 0으로 끝나는 엔티티로 구성된 HTTP 응답을 가지고있다.NOOB : HttpClientCodec에 DelimiterBasedFrameDecoder 묶기

나는 0- 끝나는 엔티티를 개별적으로 처리하기를 원한다. 그렇게하는 명백한 방법은 DelimiterBasedFrameDecoder에 연결하는 것처럼 보인다.

그러나 HttpClientCodec 다음에 메시지는 HttpResponse 또는 HttpChunk이고 DelimiterBasedFrameDecoder (물론 모든 FrameDecoder)는 원시 ChannelBuffer에서 작동하려고합니다.

그래서 나는 함께 해킹 할 수 있다고 확신하지만, 이것을 수행하는 '올바른'방법을 알고 싶습니다. '권리'는 우아하고 정확하며 Netty의 '정신'으로 다양하게 정의 될 수 있습니다.

사과가 너무 순진한 경우 사과드립니다. 응용 프로그램이 직접 자신의 와이어/프레임 형식으로 TCP/UDP를 사용하는 경우

롤랜드

답변

0

FrameDecoders은 매우 유용합니다. 이러한 유형의 디코딩에 사용하려면 DefaultHttpResponse를 ChannelBuffer로 변환하는 OneToOneDecoder 핸들러가 필요합니다. 응용 프로그램이 복잡한 응답을 받으면 HttpChunkAggregator를 파이프 라인에 추가해야합니다.

DefaultHttpResponse를 channelBuffer 배열로 디코딩하는 간단한 업스트림 처리기를 선호합니다. 응용 프로그램 처리기에서 디코딩을 분리하려는 경우, 다음 파이프 라인을 가질 수 있습니다.

pipeline.addLast("decoder", new HttpResponseDecoder()); 
    pipeline.addLast("aggregator", new HttpChunkAggregator(1048576));//optional 
    ... 
    pipeline.addLast("encoder", new HttpRequestEncoder()); 
    pipeline.addLast("oneToOneDecoder", new Http2ChannelBufferDecoder extends OneToOneDecoder {...}) 
    ... 
    pipeline.addLast("delimiterDecoder", new DelimiterBasedFrameDecoder(1048576, Delimiters.nulDelimiter())); 
    ...  
+0

감사! HTTP 서버에 대한 디코딩 파이프 라인을 제시했다고 생각하십니까? 내 애플 리케이션은 chunked 응답을받는 HTTP 클라이언트입니다. 그리고 내가 도착할 때 청크를 처리하려고합니다. 전체 메시지가 완료 될 때까지 HttpChunkAggregator가 멈 춥니 다. '간단한 업스트림 처리기를 사용하여 디코딩하는 것을 선호합니다 ...'에 대해 조금 더 자세히 설명해 주시겠습니까? –

+0

예, 정확합니다 :), 업데이트했습니다. HttpChunkAggregator는 마지막 청크가 수신 될 때까지 대기 한 다음 전체 HttpResponse로 메시지 이벤트를 시작합니다. 간단한 업스트림 처리기를 사용한다는 것은 파이프 라인의 마지막 두 핸들러를 대체하는 간단한 업스트림 처리기 구현을 할 수 있다는 것입니다. –