게임에 적합한 통신방식은 무얼까.~ p2p방식중 어느것이?? -0-

2007. 2. 2. 10:32Java

지금 온라인 게임에서 p2p를 구현하는 중이다.
과연 어떤 방식이 좋을까 생각중이다.

조사한 통신방식들이다. 

1. 중앙집중 방식
    이건 p2p가 아니다. 중앙에 서버가 있고 각 클라이언트들은 서버에 연결되어 있다.
    아주 기본적인 방식이지 ㅋㅋ, 서버가 모든 권한및 정보를 가지고 있기때문에
    클라이언트는 서버에 정보를 요청하고 데이터도 서버로부터 받는다.
    => 많은 서비스가 이렇게 하지만 돈은 무쟈게 깨질꺼다. 부하도 엄청나다.
         단, 사용자 인증및 정보관리가 쉽다.

사용자 삽입 이미지

2. 하이브리드 방식(브로커드란 중개를말한다.)
    즉 말그대로 브로커드란 클라이언트를 중개해주는 방식이다. 서버는 각 클라이언트의 위치나 정보를 검색하기 쉽게 인덱싱하고, 클라이언트가 물어오면 위치를 알려준다.
    그럼 클라이언트는 해당 데이터가 있는 클라이언트와 통신을 해 데이터를 수신받는다.
    => 중앙집중 + p2p 방식인데. 훔. 역시 유저가 많으면 서버 부하도 심해질꺼다.
         단 중앙집중보다는 엄청나게 효율적,
온라인 게임 P2P가 대부분 이렇게 될것으로 추정된다.
사용자 삽입 이미지

3. Pure p2p (Decentralized 방식)
    어떻게 보면 중앙집중과는 정 반대다. ㅎㅎ 말그대로 pure 오 순수.~ 서버는 필요없다. 각 클라이언트가 서버 역활도 한다. 하지만 해당 데이터를 위치를 찾으려면 계속 찾으러 다녀야한다. 검색시간이 무지 느릴꺼다.
사용자 삽입 이미지

4. Super peer
    말그대로 슈퍼다. 위의 pure p2p와 서버는 필요없다. 흠. 단지 여러 peer들중 아주 상태 좋은 놈들이 서버 역활을 하는거다. 다른 peer들은 그 super peer에 접속해서 검색을 하고 데이터 위치를 찾아내 해당 클라이언트와 p2p를 한다. 어떻게보면 pure peer의 보완책이라 할수 있다.
super peer가 한개가 아니라 여러개가 될수 있으니 하나가 다운되면 다른 super peer에 접속해서 하면 되는것이다. ㅎㅎ 좋긴 좋다. 흠. ㅡ.ㅡ; 어떤것이 super peer가 되어야하는지도.. 구현하기 힘들것다.

사용자 삽입 이미지

과연.. 어느것이 온라인 게임 FPS p2p에 맞는 것일까. 어떤것이 =0=

생각한 방식은 이렇다.
S(서버에) A,B,C,D 가 연결되어 있다고 하면

1. 클라이언트 들은 S 에 TCP와 UDP로 연결되어 있다.
2. A 클라이언트는 S로부터 B,C,D의 위치를 가져와 UDP 접속한다.
3. B 클라이언트는 S로부터 A,C,D의 위치를 가져와 UDP 접속한다.
4. C 클라이언트는 S로부터 A,B,D의 위치를 가져와 UDP 접속한다.
5. D 클라이언트는 S로부터 A,B,C의 위치를 가져와 UDP 접속한다.

* 즉 하나의 클라이언트는 같은 장소에 접속한 클라이언트와의 연결세션을 모두 가지고 있는다.
* 연결이 안되는 클라이언트는 S를 통해서 대신 데이터를 전송한다.
* 일정시간동안(1초)연결이 되지 않으면 중계서버를 통해 통신한다.
* 공유기를 사용하는 클라이언트는 UDP 홀펀칭을 사용해 port를 맵핑한다.




내용은 http://www.bsdg.org/Jim/Peer2Peer/Paper/3214-architectures.html 여기에서 참고 했네요. ^^
후. 그나저나 어떻게 할지 고민이네요. 하이브리드 방식이 될것 같긴한데. 흠.

by ncanis(조성준)