netty 예제

    파이프라인은 Netty에게 가장 중요한 개념 중 하나입니다. 파이프라인을 양방향 큐로 처리할 수 있습니다. 큐는 인바운드 및 아웃바운드 처리기로 채워져 있습니다. 모든 처리기는 서볼릿 필터처럼 작동합니다. 이름에서 알 수 있듯이 „인바운드“ 처리기는 읽기-In I/O 이벤트만 처리하며, „OutBound“ 처리기는 쓰기 아웃 I/O 이벤트인 „InOutbound“ 처리기만 처리합니다. 예를 들어 5개의 처리기로 구성된 파이프라인은 blow처럼 보입니다. 또 다른 점은 ChannelHandlerContext.write(및 writeAndFlush()) 메서드가 ChannelFuture를 반환한다는 것입니다. 채널Future는 아직 발생하지 않은 I/O 작업을 나타냅니다. 즉, 모든 작업이 Netty에서 비동기이기 때문에 요청된 작업이 아직 수행되지 않았을 수 있습니다. 예를 들어 다음 코드는 메시지를 보내기 전에도 연결을 닫을 수 있습니다. 처리기의 모든 메서드는 해당 이벤트가 발생할 때 호출됩니다. 따라서 처리기가 추가될 때 버퍼를 초기화하고 새 바이트를 수신할 때 데이터를 채우고 충분한 데이터를 얻을 때 처리를 시작합니다. 채널은 I/O 요청이 통과하는 터널로 생각할 수 있습니다.

    모든 채널에는 자체 파이프라인이 있습니다. API 수준에서 가장 많이 사용되는 채널은 소켓 서버용 io.netty.channel.NioServer소켓 채널과 소켓 클라이언트용 io.netty.channel.NioSocketChannel입니다. 따라서 수신 부분은 서버 측 또는 클라이언트 측에 관계없이 수신된 데이터를 응용 프로그램 논리로 쉽게 이해할 수 있는 하나 이상의 의미 있는 프레임으로 조각모음해야 합니다. 위의 예제의 경우 수신된 데이터는 다음과 같이 구성되어야 합니다. 가장 흥미로운 부분은 이 선입니다: 실제 프로젝트에서 첫 번째 입력 처리기, 위의 차트의 처리기 1은 일반적으로 디코더입니다. 위의 차트에서 마지막 출력 처리기 인 처리기 2는 일반적으로 인코더입니다. 마지막 InOutboundHandler는 일반적으로 실제 비즈니스를 수행하여 입력 데이터 개체를 처리하고 회신을 다시 보냅니다. 실제 사용에서 마지막 비즈니스 논리 처리기는 종종 I/O 스레드와 다른 스레드에서 실행되므로 시간이 많이 소요되는 작업에 의해 I/O가 차단되지 않습니다.

    (아래 예제 참조) 눈에 띄게 채널파이프라인에 두 개 이상의 ChannelHandler를 추가할 수 있으므로 하나의 모놀리식 ChannelHandler를 여러 모듈식 채널핸들러로 분할하여 응용 프로그램의 복잡성을 줄일 수 있습니다. 예를 들어 TimeClientHandler를 두 개의 처리기로 분할 할 수 있습니다 : 이 아키텍처가 더 다른 이유와 예제에 대한 놀라운 상세한 artilces에 추가하면 더 좋습니다. 이해와 자세한 기사를 읽고 계속 동기 부여 … 이 챕터는 Netty의 핵심 구문들을 둘러보며 간단한 예제를 통해 빠르게 시작할 수 있도록 합니다. 이 장의 끝에 있을 때 Netty 위에 클라이언트와 서버를 바로 작성할 수 있습니다. 이 예제에는 서버 1대와 클라이언트 1개입니다. 긴 연결은 데이터 전송에 사용됩니다. 5초마다 데이터 사이에 데이터가 없는 경우 하트 비트 메시지가 서버에서 클라이언트로 전송됩니다. 하트 비트 메시지에는 보내는 시간의 타임스탬프가 있습니다. 클라이언트는 하트 비트를 얻을 때 아무것도하지 않지만 단순히 서버에 다시 보낼 수 있습니다. 서버는 recv 시간 빼기 시간을 전송하여 사용하여 루프백 지연을 인쇄할 수 있습니다. 다음 챕터에서 Netty에 대한 자세한 정보가 있습니다.

    또한 io.netty.example 패키지의 Netty 예제를 검토하는 것이 좋습니다. 그것은 매우 간단하고 서버 측 예제와 다른 보이지 않습니다. 그러나 이 처리기는 인덱스아웃바운드예외를 올리는 작업을 거부하는 경우가 있습니다. 다음 섹션에서 이러한 일이 발생하는 이유에 대해 설명합니다. 나는 나에게 간단한 것 같은 예를 만들 수 없었기 때문에이 게시물의 제목을 지나치게 약속했다고 느낍니다.