안녕하세요, 답변 감사합니다.
일단 handler 에서는 파일을 저장만 하고 file 경로가 담긴 dto 를 (파싱 결과: 파일정보 + 기타 정보) concurrentqueue 에 담고
scheduler 에서 해당 queue 에 담긴 dto를 get 하여 파일을 분석하는 방향으로 진행하고 있습니다..
혹시 번외로 아래와 같은 상황에 대해서 도움 받을 수 있을까요?
1. 파일 사이즈가 작은 것은 decoder 를 통해 handler 의 channelRead 로 한번에 들어옴 -
log.info() 찍어보면 한벅 찍힘
2. 파일 사이즈가 클 경우 channelRead 에 여러번 나뉘어서 들어옴
3. channelRead 에서는 Object msg 를 byte[]로 casting 하여 파싱하는 작업 (byte 전문에 사용자 정보와 기타 정보 + 파일데이터 가 포함되어 있음)을 하고 있는데
2번 처럼 여러번에 나뉘어져 들어오다 보니 파일이 제대로 저장이 안되고 파싱이 실패함
4. decoder 에서 out.add(ByteBufUtil.getBytes(msg)); 하기 전에 무언가 체크 해서 return 처리 하도록 해야 하는지?
ex) TCP Header 에 보내는 전체 byte size를 보내라고 해서 decoder 에서 해당 size 만큼 다 들어오기 전에 return 한다?
만약 이렇게 하려면 decoder 를 ChannelHandler.Sharable 하지 않고 매번 new 해야 하는건지?
이제 막 netty를 시작하는 중이라... 많이 부족 합니다.
2021년 2월 8일 월요일 오후 12시 6분 41초 UTC+9에 필그림님이 작성: