안녕하세요. Netty로 TCP 서버역할을 하는 장비 제어 프로그램을 개발중입니다.
장비로 1초 주기로 상태 요청 메시지를 전송해야 하는 요구사항이 있어 channel.eventLoop().scheduleAtFixedRate() 메쏘드를 통해 반복 작업을 수행하도록 스케줄하였고, 정상 동작하고 있습니다. 아래와 같은 대략의 코드이구요.
channel.eventLoop().scheduleAtFixedRate( () -> {
channel .writeAndFlush("REQ MSG"); // -------------------------- 문제 코드
System.
out.println("
REQ MSG");
}, 1000, 1000, TimeUnit.
MILLISECONDS);
그리고 channel.close()를 호출해주면 위에 스케줄한 반복 태스크가 자동으로 실행을 중료해주는 것으로 확인이 되는데요.
그런데 문제는 아래와 같이 channel.writeAndFlush() 코드를 제거해 주면 channel.close()를 해도 스케줄한 태스크가 종료되지 않는 차이가 발생을 하네요.
channel.eventLoop().scheduleAtFixedRate( () -> {
// channel .writeAndFlush("
REQ MSG ");
System.
out.println("
REQ MSG");
}, 1000, 1000, TimeUnit.
MILLISECONDS);
둘 간의 어떤 차이점이 있는지 혹시 답변해 주실 분이 있을까요? 혹시 제가 검색해 볼 수 있는 키워드 같은 것만 알려주셔도 좋을 것 같아요.
감사합니다.