2013-03-28 2 views
1

http pipelining을 처리하기 위해 채널 처리기를 구현했습니다. 내 코드는 github에 있습니다. https://github.com/huntc/netty-http-pipeliningNetty http 파이프 라이닝 접근 유효성 확인

제 질문은 제가 취한 접근법과 Netty 아키텍처의 맥락에서 합리적인 것인지 여부입니다.

내 HttpPipeliningHandler가 업스트림 HttpRequest를 수신하면 OrderedUpstreamMessageEvent 유형의 새 메시지 이벤트를 형성합니다. 이 이벤트는 또한 내 패키지의 일부이며 응답 메시지를 공식화 할 때 필요한 요청과 관련된 정보를 유지합니다.

채널 핸들러는 더 상류는 전송이 응답을 청크처럼

ctx = ChannelHandlerContext instance 
oue = OrderedUpstreamMessageEvent instance 
somemessage = some message instance to be sent as an http response 

당신은 또한 더 재미있는 물건을 할 수있는 OrderedDownstreamMessageEvent 예컨대 :

ctx.sendDownstream(new OrderedDownstreamMessageEvent(oue, somemessage)); 

를 생성하여 회신을 형성하는 OrderedUpstreamMessageEvent를 수신합니다.

이 방법이 합리적으로 보이나요? 그것은 확실히 작동합니다! 업스트림 핸들러에서 메시지 이벤트를 변환하는 것이 규칙적인지/수용 가능한가? 분명히 메시지 이벤트가 다시 변환되면 파이프 라이닝 기능이 작동하지 않습니다.

답변

1

나는 빠른 모양을 가지고 있었다. .. 약간의 설명.

1) 모든 스레드가 다운 스트림 이벤트를 발생시킬 수 있으므로 PriorityQueue 액세스가 동기화되어야합니다.

2) 동일한 요구 당신은 Channel.close를 사용하려면

3) 더 나은해야하는 nextRequiredSequence에 대해 수행 또는 AtomicInteger를 사용하는()

는 나머지는

+0

감사 좋아 보인다! 이제 코드가 동기화를 처리합니다. 다운 스트림 처리기에서 javadoc을 더 자세히 읽어야합니다. 또한 지금 연결 끊기 대신 닫기를 사용합니다. –

+0

비록 내 업적 처리기에서 메시지 이벤트를 변환하는 것이 정규/수용 가능합니까? –

관련 문제