20
Get started with Netty based on User guide for 4.X at Netty.io CK. Kim

Get started with netty

  • Upload
    -

  • View
    1.279

  • Download
    0

Embed Size (px)

DESCRIPTION

기본적인 netty사용법. netty.io get started 일부 번역

Citation preview

Page 1: Get started with netty

Get started with Nettybased on User guide for 4.X at Netty.io

CK. Kim

Page 2: Get started with netty

모든 패킷을 다 무시해버리는 서버를 만들어 보자.DISCARD Server

Page 3: Get started with netty

일단 서버가 연결된 뒤 패킷을 핸들링 하는 부분을 만들어보자

Page 4: Get started with netty

ChannelInboundHandlerAdapter는 ChannelInboundHandler.ChannelInboundHandler인터페이스의 구현체이다.

Adapter를 쓰는데 직접 ChannelInboundHandler를 모두 구현하는 것 보다 쉬울것이다.

Page 5: Get started with netty

channelRead를 상속받는다. channelRead 는 클라이언트로 부터 메시지를 맏을때마다 호출된다. 이 예제에서는 메시지를 ByteBuf로 캐스팅 하여 사용하였다.

Page 6: Get started with netty

무시하는 서버를 위해서는 모든 메시지에 대해 아무런 행동을 하지 않아도 된다. 하지만, 핸들러를 쓰면서 이것 하나는 꼭!!! 기억해야한다.

msg는 object reference를 풀어주기위해서 반드시 release를 해 줘야한다.

Page 7: Get started with netty

msg를 반드시 release하기 위해서 보통 다음과 같은 방법을 쓴다.

Page 8: Get started with netty

exceptionCaught는 IOException 같은 Throuwable Exception이 났을때 핸들링 하는 메서드이다. 이부분에서 에러를 로깅하고 체널을 닫을수 있도록 한다.

Page 9: Get started with netty

이제 Server를 생성하고 새로운 요청을 Listen/Connect하는 런쳐를 만들어보자

Page 10: Get started with netty

DiscardServer 는 port를 입력받아 생성하는 생성자와 실제 서버를 실행하는 run()메서드로 이루어져 있다.

Page 11: Get started with netty

NioEventLoopGroup는 multi-threaded event loop이다. event loop란것은 I/O작업을 받아들이는 역할을 한다.

NioEventLoopGroup은 EventLoopGroup의 구현체인데, EventLoopGroup은 전송방식에 따라 여러 구현체가 있는데 이 예제에서는 서버를 만들것이기 때문에 Nio를 사용한다.

Page 12: Get started with netty

EventGroup에는 크게 boss 와 worker 이 두가지 역할이 있다. boss는 들어오는 연결요청을 받아들이는 작업을 하고 worker는 연결된 요청을 처리하는 작업을 한다.

얼마나 많은 쓰레드를 만들것이나, 얼마나 많은 채널을 열것이냐는 EventGroup의 생성자를 통하여 설정할 수 있다.

Page 13: Get started with netty

ServerBootStrap이 커넥션이 맺어 져 새로운 Channel을 만들때에 NioServerSocketChannel을 생성할 수 있도록 지정해 준다.

Page 14: Get started with netty

ChannelInitializer는 새롭게 만들어지는 채널을 개발자가 설정할 수 있도록 해주는 아주 특별한 핸들러이다. 보통은 pipeline에 채널핸들러를 추가해 주기 위해 사용하는데, 이 예제에서는 전에 만든 DiscardServerHandler를 추가해 준다.

Page 15: Get started with netty

채널에다 옵션을 추가할 수 있다. 위 코드는 Backlog를 128로 지정하는 옵션이다.

ChannelOption를 참조하면 더 많은 옵션을 확인 할 수 있다.

Page 16: Get started with netty

설정에는 option()과 childOption()두가지가 있다. option은 외부의 요청을 받는 채널을 위한 옵션이고,

childOption은 커넥션이 맺어진 후 생성되는 자식 채널의 위한 옵션이다. 위 코드에서는 그렇게 생성된 채널에 KeepAlive속성을 주고 있다.

Page 17: Get started with netty

이제 서버를 실행 시킬 모든 준비가 끝났다. bind를 통하여 특정 포트에 할당 할 수 있다.

포트만 다르다면, 몇번이고 같은 서버를 실행 할 수 있다.

Page 18: Get started with netty

등짝.. 아니, 메시지 내용을 보자!!

Page 19: Get started with netty

InboundHandler의 channelRead에서 인자로 주어지는 msg를 ByteBuf로 캐스팅하여 사용하면 된다.

Page 20: Get started with netty

추가적으로 해당 체널에 다시 메시지를 보내고 싶다면, ChannelHandlerContext의 write()를 이용하면 된다. 위의 코드는 Eco Server의 channelRead이다.