Search
Duplicate
📒

[Spring Netty] 06-2. Spring Netty Client 구현

상태
미진행
수업
Spring Netty
주제
4 more properties
참고

Spring Netty Client

InetSocketAddress

NOTE
@Bean public InetSocketAddress dataInetSocketAddress() { return new InetSocketAddress(host, dataPort); }
Java
복사
서버의 host, port를 설정한다.

BootStrap

NOTE
@Bean public Bootstrap nettyBootstrap(EventLoopGroup eventLoopGroup) { Bootstrap bootstrap = new Bootstrap() .group(eventLoopGroup) // 이벤트 루프 설정 .channel(NioSocketChannel.class) // 소켓 입출력 모드 설정 .option(ChannelOption.TCP_NODELAY, true) // TCP_NODELAY 소켓 옵션을 설정(Nagle 알고리즘 사용 X) .option(ChannelOption.ALLOCATOR, PooledByteBufAllocator.DEFAULT); // PooledByteBufAllocator 사용 return bootstrap; }
Java
복사
클라이언트쪽 설정
TCP_NODELAY
Nagle 알고리즘을 활성/비활성화 하는 코드
Nagle 알고리즘 → 작은 패킷을 모아서 한번에 보내는 알고리즘 (혼잡도는 줄지만, 대기시간이 늘어남)
전송시간 증가, 트래픽도 증가.. (현재 작은 데이터를 자주보내므로, 어울린다고 판단)
PooledByteBufAllocator
Netty의 바이트 버퍼 할당자
메모리 할당과 해제이 관련된 오버헤드를 줄이기 위해 메모리를 풀(Pool)에서 가져오거나 반환하는 방식 사용
메모리를 재사용하므로, 성능 향상과 메모리 사용량 감소 기대.
PooledByteBufAllocator.DEFAULT는 기본 인스턴스를 사용하므로 동일한 인스턴스를 여러 채널에서 공유하게 된다.

connect

NOTE
public void connect() { // ChannelFuture: I/O operation의 결과나 상태를 제공하는 객체 // 지정한 host, port로 소켓을 바인딩하고 incoming connections을 받도록 준비함 // 서버에 연결하고, 연결이 완료될 때까지 대기합니다. ChannelFuture clientChannelFuture = bootstrap.connect(tcpPort); // 연결 상태를 확인하기 위한 ChannelFutureListener 추가합니다. clientChannelFuture.addListener((ChannelFutureListener) future -> { // 연결 성공 if (future.isSuccess()) { Channel channel = future.channel(); log.info("Connected to the server successfully."); managers.forEach(manager -> manager.sendData(channel)); } // 연결실패 else { log.error("Failed to connect to the server. Cause: ", future.cause()); } }); // 동기화를 대신에 채널에서 수행합니다. clientChannel = clientChannelFuture.channel(); clientChannel.closeFuture().addListener((ChannelFuture future) -> log.info("Server channel closed.")); }
Java
복사
서버에 연결했을때 이벤트리스너를 등록하고, 채널이 닫히는 경우도 이벤트 리스너로 등록한다.