0
나는 매우 무거운 계산을 수행 할 http-server를 작성하고 있습니다. 비즈니스 로직 및 IO 차단과 관련된 일부 인코더 - 디코더 파이프 라인이 있습니다.IO 용 Netty do-nothing 코덱?
.addLast(ioGroup, new ChannelDuplexHandler()) //<---- Only for IO
.addLast(logicGroup, new HttpRequestDecoder())
.addLast(logicGroup, new HttpObjectAggregator(Int.MaxValue))
.addLast(logicGroup, new HttpResponseEncoder())
.addLast(logicGroup, new ChunkedWriteHandler())
.addLast(logicGroup, new ResponseBodyDecoder())
.addLast(logicGroup, new MyBusinessLogic())
그것의 Netty에서 다음과 같이 할 commmon이다
public void initChannel(Channel ch) {
ch.pipeline()
//All actions in these handlers are very heavy and involve some IO
.addLast(logicGroup, new HttpRequestDecoder())
.addLast(logicGroup, new HttpObjectAggregator(Int.MaxValue))
.addLast(logicGroup, new HttpResponseEncoder())
.addLast(logicGroup, new ChunkedWriteHandler())
.addLast(logicGroup, new ResponseBodyDecoder())
.addLast(logicGroup, new MyBusinessLogic())
}
그래서 나는 또 다른 노동자
EventLoopGroup ioGroup = new NioEventLoopGroup(4)
을 생성하고 처음에 간단한 처리기를 추가하기로 결정? 아니면 더 나은 방법이 있습니까?
방금 깨달은 것은 이것입니다. 리트리브 덩어리는 또한 상당한 시간이 걸립니다. 그래서 나는 그것을 IO 쓰레드와 분리 할 것이다. –
'ChunkedInput'에서'HttpResponseEncoder'를 실제로 응답하기까지는 많은 시간이 걸립니다. 'ChunkedInput :: readChunk'는 필자의 경우 무거운 연산이다. –
그런 다음 EvenLoop에서도 이동하십시오. –