우선 현재까지 이해하신 점은 모두 맞으십니다.
채널이 Unregister로 된다는 것은, 채널이 닫혔다(끊겼다)를 의미하는데요. 여러가지 이유가 있을 수 있습니다.
1) 서버 쪽에서 소켓을 close 한다
2) client 쪽에서 소켓을 close 한다
3) 그외에 여러 예외 상황 (exception이 발생하여 처리되었다던지, network 방화벽이라던지, socket timeout이라던지...)
일단 쉽게 확인 가능한것은 1) 과 2) 인데요.
서버 쪽에서 close 하는 것은 서버쪽 handler 쪽 소스를 보시면서 혹시 ctx.close()나 ctx.channel.close()등 채널을 닫는 소스가 있는지 확인해보세요.
debug가능하시다면 해당소스 부분을 break point걸어서 확인해 보실 수 있으실테고, 여의치 않으시면 로그를 남기셔도 되겠죠.
clinet쪽에서 close하는 것은 client제작 쪽에 문의를 해봐야 할것입니다. socket은 양방향으로 열려있어야 하기 때문에 한쪽에서 끊으면 반대쪽에서도 유지할 수가 없습니다.
서로 확인이 어렵다면, wireShark 같은 패킷 보는 프로그램을 이용해서, RST나 FIN 신호가 어느쪽(server쪽으로부터인지 clinet부터인지)에서 오는지 확인하면,
좀더 확실한 범인(?)을 찾는데 도움이 될 것입니다.
정말 양쪽에서 소켓을 닫는 요소가 없다면, 그 뒤부터는 그 외의 상황에 대해서 네트워크 환경이나 머신 설정등을 확인해봐야할 것입니다.
2016년 1월 24일 일요일 오후 7시 50분 43초 UTC+9, kim jeff 님의 말: