전문 발송 후 Ack 전문 미 수신 시 Timeout 발생 및 해당 전문 재발송 구조에 대해서

in #kr-dev8 years ago

안녕하세요 @flyyou입니다.

전문발송에 대해서 저도 아래와 같은 문제를 만났었고 그것에 따른 저의 해결책을 풀어보고자 합니다.

Netty를 이용해서 소켓 서버를 개발하고 있습니다.

클라이언트, 서버를 모두 번갈아 가면서 개발을 하고 있는데 모두 Netty를 사용해서 개발하고 있습니다.

전문 규격서를 보면 보통 전문을 보내고 정해신 시간동안 응답 전문을 수신하지 못하면 3회 재전송을 하고 3회 이상 재전송을 했는데도

응답 전문을 수신하지 못하면 해당 접속을 끊는 로직이 클라이언트나 서버 양쪽에 모두 적용되어 있는 경우가 많은데

저같은 경우 클라이언트의 경우 전문을 발송하고 HashedWheelTimer를 이용하여 정해신 시간을 걸고 그 시간 안에

응답 전문이 오면 해당 타이머를 중지하는 방식으로 개발하였습니다.

하지만 해당 방식으로는 보냈던 전문의 재발송을 처리하기가 어렵고 특정 전문의 재발송 로직을 개발하는데

어떤 식으로 개발해야 할지 명확한 그림이 나오지 않아서 혹시 Netty를 통해 해당 로직을 개발하신 개발자 분 계시면

조언 부탁드립니다.


도움이 되실 지는 모르겠는데, 저같은 경우도 타이머 비슷하게 필요한 경우였습니다.
타이머라기 보다는 다중 클라이언트를 구분해서 처리해야 하는데,
핸들러에서 일괄 처리하는걸로는 방법이 없더군요.
(제가 잘못 사용했는진 모르겠지만, 다중 처리가 잘 안되더군요.)

그래서, 저의 경우는 HashedWheelTimer를 사용하지 않고,
오는 전문 메세지는 List 라던가 Hashmap 같은데 쌓아놓고
스케줄러를 이용해서 처리하는 방식을 사용했습니다.

스케줄러를 이용하면 스레드풀을 이용할 수 있기 때문에
다량의 전문처리도 가능하고,
지정한 시간(끝나고 일정 휴식, 또는 일정한 시간만큼)동안
일정하게 처리하기 때문에
이 방법을 적용했고, 개인적으론 이 방법이 효율적인 것 같아서 사용하고 있습니다.

참고하시기 바랍니다.

Sort:  

내용이 너무 어렵습니다. ㅠㅠ

네티책 얇습니다. 한번 쭉 읽어보시길 추천드립니다.