본문 바로가기

(비정기) Dlbo's Post

Design Pattern & Network, 5. 간략한 TCP/IP 서버.



간략한 윈속을 이용한 TCP/IP 서버의 예제입니다.

뭐...

1:1 전용이긴 하지만 -_-ㅋㅋ

클라이언트로부터 데이터를 받아 출력하고 다시 돌려보내준다는 점은 서버로서의 역할을 미약하게나마

갖췄다고 볼 수 있지요.

저 예제에서 보시면 알겠지만, 1개의 연결에 대해 1개의 소켓이 필요합니다.

받는 소켓인 listen과 클라이언트에게 보내는 client_send 소켓이 분류되어 있지요?

컴 두대가 대화하려면 소켓이 2개 필요하다는 이야기입니다.

아, 물론 두대가 1개의 소켓으로 대화하는 방법도 있지만..

저런 구조로 그런걸 하는건 왠만해선 추천해드리지 않습니다.

-_-;;

여기서 잠깐.

서버 자체가 싱글턴이냐, 소켓이 싱글턴이냐... 혹은 아무것도 아니느냐.

약간 머리굴려볼 필요가 있습니다.

같은 IP주소에 같은 역할을 하는 서버가 2~3개씩이라면?

이 경우는 두세개의 서버가 모두 같은 패킷을 받아 같은 소켓으로 같이 쏴대기 때문에

서로 엉키거나, 혹은 쓸데없이 리소스를 많이 잡아먹는 안습상황이 발생할 수 있습니다.

한마디로 뻘.짓. 이라는 거지요.

반면, 같은 기능을 하는 서버를 여럿 띄워서 1개 클라이언트로 접속 시도시 여러개의 서버에서

동시에 1개의 클라이언트가 다중접속한것처럼 보이며,

각각의 서버가 따로 클라이언트에게 잘만 데이터를 보내줍니다.

-_-;;

이 점으로 미루어 볼 때, 소켓은 여럿이서 같이 쓸 수 있으므로 그냥 아무것도 아니지만,

서버는 왠만해선 같은 기능이라면 싱글턴으로 돌아가도록,

같은 프로세스가 실행중일때는 실행되지 않도록 만드는 것이 좋습니다.

객체지향의 싱글턴과는 다르지만 =_=

싱글턴과 비슷한 모습으로 만드는게 유리하다는 의미이죠.