2012-11-13 2 views
4

Netty 채널에 여러 상태가 있지만 실제 상태 전환에 대해 문서를 찾을 수 없습니다. 이에 대한 설명서에 가장 가까운 것은 Netty 3.2.x 시스템에서 찾을 수 있습니다. here입니다.Netty 채널 상태 전환이란 무엇입니까?

채널이있을 수있는 가능한 상태를 찾을 수있었습니다. here.

그러나 채널이 한 상태에서 다른 상태로 만들 수있는 정상적인 전환을 설명하는 것은 없습니다. 모든 채널이 모든 가능한 상태 전이를 만드는 것은 아닙니다.

답변

4

다른 Netty 채널은 실제로 다른 상태 천이를합니다. 일반적으로

가능한 상태 전환은 TCP 기반 서버에 대한 채널은 다음과 같습니다

OPEN -> (BOUND -> UNBOUND)* -> CLOSE 

당신은 업스트림 이벤트 중 하나를 처리하기 위해 파이프 라인에 에 해당하는 방법을 SimpleChannelHandler 서브 클래스를 사용하는 경우 이러한 상태 변경은 다음과 같습니다.

channelOpen 
channelBound 
channelUnbound 
channelClose 

서버 채널 CONNECTED 상태로 이동하십시오. 그들은 언 바운드 상태로 이동 일단

서버 채널은 거의 그러나이 YMMV 그래서 응용 프로그램에 의존하는 것으로 보인다, 다시 BOUND 상태로 이동합니다.

자식 채널이 열리거나 닫힐 때 서버 채널이 이벤트를 발생시킬 수 있습니다. 이러한 이벤트는 서버 채널이 BOUND 상태에있는 경우에만 발생할 수 있습니다. 이러한 이벤트는 다음 서버 채널 대신 상류 를 전송하는 경우 당신의 SimpleChannelHandler 서브 클래스에서 다음 방법이라고 : TCP 기반의 자녀와 클라이언트 채널 에 대한

childChannelOpen 
childChannelClosed 

가능한 상태 전환은 다음과 같습니다

OPEN -> (BOUND -> (CONNECTED -> DISCONNECTED)* -> UNBOUND)* -> CLOSE 

이 제 연결된 상태로 이동하는 하지것 같습니다채널 코드 내에서 시행; 그러나이 상태는 채널이 CONNECTED 상태로 이동하기 전에 Netty 프레임 워크 내에서 항상 자식 채널과 클라이언트 채널 모두에 대해 이 먼저 실행됩니다.

당신이 SimpleChannelHandler 또는 그 파이프 라인의 서브 클래스를 사용하는 경우에 해당하는 방법은 다음과 같습니다

channelOpen 
channelBound 
channelConnected 
channelDisconnected 
channelUnbound 
channelClose 

는 TCP 기반 채널 아무것도 읽거나되기 전에 하게 연결 상태에 있어야합니다 채널에 쓰여졌습니다. 여기에는 결코 서버 채널을 읽을 수 없거나 쓸 수없는 서버 채널 이 포함되어 있습니다. 이는 서버 채널이 항상 서버 대신에 연결 작업을 관리하는 데에만 사용되므로 놀라 울 정도는 아닙니다.

데이터 그램 소켓은 읽고 실제로 (데이터 그램 소켓을 연결하는 보안 검사를 피하기 으로 빠를 수 있지만) 연결 을하지 않고 데이터를 기록하는 데 사용할 수 에서 TCP 기반 소켓 다르게 작동합니다. 데이터 그램 소켓은 위에서 설명한 TCP 기반 하위 및 서버 채널에 대해 나열된 상태 전 환 모두를 사용하여 을 효과적으로 사용할 수 있습니다.

+0

감사합니다. 감사합니다. 일부 TCP 기사 나 netty 소스를 기반으로 한 것입니까? – yetanothercoder

+0

그리고 질문 : 클라이언트가 원격 피어에 대해 수행하는 활성 연결 수를 계산해야하는 경우'channelConnected '를 증가시키고'channelDisconnected'를 감소시키는 것으로 충분합니까? 'keep-alive' 연결 및 다른 기능의 경우 카운터가 정확합니까? 감사! – yetanothercoder

+0

자세한 내용은 출처를 읽었습니다. 다른 사람들이 비슷한 질문을하는 경우를 대비해 다른 사람을 구할 것이라고 생각했습니다. WRT 활성화 된 연결 수이면,'channelConnected'에서 카운터를 증가시키고'channelDisconnected'에서 카운터를 감소시키는 것으로 충분합니다. HTTP keep-alive 및 유사 프로토콜 온 TCP 구성은 응용 프로그램이 소켓 연결을 제어함에 따라 간접적으로 Netty에 영향을 미치지 않습니다. –

관련 문제