728x90
LineBasedFrameDecoder 살펴보자
받은 bytebuf 데이터를 line endings , "\n","\r\n" 을 분리해준다고 한다.
밑에는 주루룩 읽어보면 될듯~
자 그럼 앞에 있었던 코드를 바꿔보자
아래 내용으로 바꾸면 기대하는 건 channelRead 시에 안녕반가워 -> 두번째 반가워 -> 세번째 반가워 가 순서대로 도착할것같다
ByteBuf buf = Unpooled.buffer();
buf.writeBytes("안녕 반가워\n\n".getBytes()); // 변경 전
buf.writeBytes("안녕 반가워\n두번째 반가워\n세번째 반가워\n".getBytes()); // 변경 후
LoggingHandler에 byte형태로 수신된 첫번째 단락으로 보면
"\n" 은 0a 로 표시된다. 그럼 총 3개가 있으니 다 수신된거다.
"channelRead.. 안녕 반가워" 가 첫번째이고 EchoServerHandler.java에서 바로 ">> " 를 붙여서 리턴한다.
이런게 두개 더 있다..
실제로는 3개를 동시에 보낸다 하더라도 EchoServerHandler.java에는 3개 뭉텡이가 하나씩 전달 된다.
다음 readOutbound를 읽으면 channelRead 이벤트에서 ctx.channel().writeAndFlush 된 ">> 안녕 반가워"를 읽을수 있다.
ByteBuf readBuff = channel.readOutbound(); // 손님 나온다
logger.info("readBuff={}",((ByteBuf)readBuff).toString(CharsetUtil.UTF_8));
그럼 두번 더 읽어보자
ByteBuf readBuff1 = channel.readOutbound(); // 손님 나온다
logger.info("readBuff1={}",((ByteBuf)readBuff1).toString(CharsetUtil.UTF_8));
ByteBuf readBuff2 = channel.readOutbound(); // 손님 나온다
logger.info("readBuff2={}",((ByteBuf)readBuff2).toString(CharsetUtil.UTF_8));
ByteBuf readBuff3 = channel.readOutbound(); // 손님 나온다
logger.info("readBuff3={}",((ByteBuf)readBuff3).toString(CharsetUtil.UTF_8));
READ COMPLETE 가 떨어지고 각각 아래처럼 읽을수가 있다,
INFO [main] io.netty.handler.logging.LoggingHandler - [id: 0xembedded, L:embedded - R:embedded] READ COMPLETE
INFO [main] EmbededExampleTest - readBuff1=>> 안녕 반가워
INFO [main] EmbededExampleTest - readBuff2=>> 두번째 반가워
INFO [main] EmbededExampleTest - readBuff3=>> 세번째 반가워
728x90
'프로그래밍 > EmbeddedChannel 이란?' 카테고리의 다른 글
EmbeddedChannel with JUnit - 2 (0) | 2022.01.10 |
---|---|
01. Pipeline 테스트 간단히 하기(feat. EmbeddedChannel) - 1 (0) | 2022.01.07 |