간략한 윈속을 이용한 TCP/IP 서버의 예제입니다.
뭐...
1:1 전용이긴 하지만 -_-ㅋㅋ
클라이언트로부터 데이터를 받아 출력하고 다시 돌려보내준다는 점은 서버로서의 역할을 미약하게나마
갖췄다고 볼 수 있지요.
저 예제에서 보시면 알겠지만, 1개의 연결에 대해 1개의 소켓이 필요합니다.
받는 소켓인 listen과 클라이언트에게 보내는 client_send 소켓이 분류되어 있지요?
컴 두대가 대화하려면 소켓이 2개 필요하다는 이야기입니다.
아, 물론 두대가 1개의 소켓으로 대화하는 방법도 있지만..
저런 구조로 그런걸 하는건 왠만해선 추천해드리지 않습니다.
-_-;;
여기서 잠깐.
서버 자체가 싱글턴이냐, 소켓이 싱글턴이냐... 혹은 아무것도 아니느냐.
약간 머리굴려볼 필요가 있습니다.
같은 IP주소에 같은 역할을 하는 서버가 2~3개씩이라면?
이 경우는 두세개의 서버가 모두 같은 패킷을 받아 같은 소켓으로 같이 쏴대기 때문에
서로 엉키거나, 혹은 쓸데없이 리소스를 많이 잡아먹는 안습상황이 발생할 수 있습니다.
한마디로 뻘.짓. 이라는 거지요.
반면, 같은 기능을 하는 서버를 여럿 띄워서 1개 클라이언트로 접속 시도시 여러개의 서버에서
동시에 1개의 클라이언트가 다중접속한것처럼 보이며,
각각의 서버가 따로 클라이언트에게 잘만 데이터를 보내줍니다.
-_-;;
이 점으로 미루어 볼 때, 소켓은 여럿이서 같이 쓸 수 있으므로 그냥 아무것도 아니지만,
서버는 왠만해선 같은 기능이라면 싱글턴으로 돌아가도록,
같은 프로세스가 실행중일때는 실행되지 않도록 만드는 것이 좋습니다.
객체지향의 싱글턴과는 다르지만 =_=
싱글턴과 비슷한 모습으로 만드는게 유리하다는 의미이죠.
'(비정기) Dlbo's Post' 카테고리의 다른 글
Design Pattern & Network, 5. 간략한 UDP 서버. (2) | 2009.05.19 |
---|---|
Dlbo's Post 연기 공지 (2) | 2009.04.25 |
Design Pattern & Network, 4. 네트워크, 프로토콜. (6) | 2009.04.14 |
Dlbo's Post 연기 공지. (1) | 2009.04.07 |
Design Pattern & Network, 3. Observer & Client. (3) | 2009.03.31 |