반응형
2장에 메시지를 주고 받고 연결을 종료하는 로직을 구성하여 봤는데, 연결한 상태에서 서버측에서 응답이 없게 되면 무기한으로 채널이 열리는 상황이 생기게 될 것입니다.
이런 경우 일정시간 체크 후에도 응답이 없으면 닫도록 처리하는 방식
서버측이 닫혀있거나 네트워크 문제등으로 서버측에 연결이 안되었을경우 여러번 시도 하거나 시도회수가 초과하면 종료하는 처리를 해보겠습니다.
서버가 열릴 때까지 요청하기
ChannelFuture 인터페이스에서 I/O처리를 담당하고 이벤트 추가 또는 연결되었는지 실패하였는 등 메소드를 통해 결과를 알 수 있습니다.
private Bootstrap bs = new Bootstrap();
bs.group...
...
...
//옵션 처리가 끝난 후 연결처리
bs.connect(addr_).addListener(new ChannelFutureListener() {
public void operationComplete(ChannelFuture future) throws Exception {
if(future.isSuccess()) {
logger.info("연결 성공");
logger.info(addr_ + " connect()");
channel_ = future.channel();
}else {
logger.info("연결 실패");
future.channel().close(); //실패하면 기존 연결을 종료하고
bs.connect(addr_).addListener(this); //재연결 처리를 한다.
}
}
});
addListener메소드를 통해 작업 리스너를 추가하고 ChannelFutureListener 인터페이스를 추가하여 콜백 메소드 operationComplete를 상속받습니다.
operationComplete 메소드는 연결 처리 후 서버와의 상태값을 얻어 올 수 있는데, isSuccess메소드의 return값이 true면 연결 성공, false면 연결 실패처리가 됩니다.
실패한 경우 기존 채널을 종료하고 재연결 시도를 하도록 구성하였습니다.
이후에는 서버가 동작할때까지 연결 시도를 하는 것을 볼 수 있습니다.
n회미만까지 연결 시도하기
시도 횟수를 처리할 변수와 제한을 둘 상수를 추가하여 if문을 통해 처리가 가능합니다.
private int fail_cnt = 0;
private final int FAIL_COUNT_LIMIT = 3;
bs...
...
...
bs.connect(addr_).addListener(new ChannelFutureListener() {
public void operationComplete(ChannelFuture future) throws Exception {
if(future.isSuccess()) {
logger.info("연결 성공");
logger.info(addr_ + " connect()");
channel_ = future.channel();
}else {
future.channel().close(); //실패하면 기존 연결을 종료하고
if(FAIL_COUNT_LIMIT > ++fail_cnt) {
logger.info("연결 실패 " + fail_cnt + "/" + FAIL_COUNT_LIMIT);
bs.connect(addr_).addListener(this); //재연결 처리를 한다.
}else {
logger.info(FAIL_COUNT_LIMIT + "회 연결 초과");
bs.group().shutdownGracefully(); //eventLoop에 등록된 Thread를 종료 처리한다.
}
}
}
});
성공하였을 경우에는 연결처리를 하고, 실패하였을 경우 count를 체크하도록 하였습니다.
반응형
'JAVA' 카테고리의 다른 글
JAVA - POI 라이브러리를 사용하여 엑셀파일 통합 읽기(.xls, xlsx 읽기) (0) | 2020.12.24 |
---|---|
Netty Client 튜토리얼 - 04 (서버에서 응답이 없는 경우 일정 시간 후 종료하기) (0) | 2020.12.04 |
JAVA - Jsch를 활용한 sftp 전송 처리하기 (0) | 2020.12.02 |
Netty Client 튜토리얼 - 02 (메시지별 보내고 받고 끊기) (0) | 2020.11.30 |
JAVA - JConsole 활용기 (자바 Thread 동작, 종료 체크하기) (0) | 2020.11.30 |