음.. 글로는 확실한 구조가 잘 이해가 안되는데요.
Client#1 <---> API서버(Netty) <---> Client #2
이런 구조인건가요?
#1로부터 요청을 받아 #2에 무언가 다시 요청을 하고 응답을 받아 #1로 전달하는 것인가요?
만일 위의 구조라면
소켓을 매번 생성해서 #2에 통신을 할 수도 있고,
소켓을 한개만 생성해 놓고 #2에 통신을 할 수도 있습니다. (둘다 common한 방식들입니다.)
요청에 따라 반복적으로 호출되는건 어쩔 수 없는 것이구요.
관건은 하나의 소켓을 재사용하느냐, 매번 새 소켓을 생성하느냐의 문제로 귀결될듯 합니다.
매번 새소켓을 생성하는 방식은 지금 방식이시고, #2에서 해당 방식을 원활히 지원한다면 '괜찮은 방법'이라고 볼 수 있겠습니다.(애초에 API 서버도 그렇게 동작중이시고..)
1개의 소켓만 이용하시려면 해당 소켓을 연결하여 Channel 객체만 공유하시면,
해당 Channel객체의 writeandflush() 메소드로 바로 연결된 소켓으로 요청을 보낼 수 있습니다.
혹은 proxy 방식으로 이전에 들어온 요청을 이미 연결된 outbound 소켓으로 보내어 처리할 수도 있습니다.
따로 socket만 가지고 처리하고 싶으시면 연결 완료된 Channel 정보를 적당히 공유해서 요청을 보낼때는 Channel을 이용해 보내고,
받을때는 해당 channel에 연결된 handler를 통해서 처리하셔도 됩니다.
2016년 1월 25일 월요일 오후 3시 46분 49초 UTC+9, 허우범 님의 말: