2009년 10월 24일 토요일

MMORPG 게임서버 프로그래밍...

----------------------------------------------------------------------------------------

Q>게임 서버에서 각 클라이언트로 브로드캐스팅이라고 하나요?

 

A>시간 간격 및 데이타 갱신: 플레이어를 예를 든다면 움직인 플레이어만 움직인 플레이어만 그 플레이어의 시야거리내에 있는 다른 플레이어에게 브로드캐스팅합니다. 즉, 움직이지 않는다면 보내지 않는것이 좋습니다.

 

만약 일정한 시간간격이라면 상황에 따라  나눌수가 있는데 제 개인적으로는 전투처럼 바로 처리는 100msec 일반적인 이동은 500~1000msec를 설정합니다.

 

Q>얼마정도 인원의 클라이언트에게 제공하는것이 좋은가?

A>플레이어 시야거리내에 있는 모든 사람에게 해야 합니다.

 

위 내용은 MMORPG를 기준으로 합니다.  캐주얼 게임이면 다를게 설정을 해야 합니다.

----------------------------------------------------------------------------------------

A> 책추천 및 테스트 방법

1. Scott meyers 가 쓴 책은 전부 보세요. 정말로 좋습니다->Scott meyers는 천재

2. 최근에 번역되어서 나온 GameCoding Complete

3. Win32 멀티 스레드 프로그래밍

4. Win32 SystemProgramming

5. Gems1~4

6. Windows 구조와 원리 그리고 Codes 등등입니다.

7. MSDN 항상 최신의 것을 설치해서 변경된 것을 보세요

Q> 서버 개발

A> 서버 개발을 할때는 꼭 멀티스레드로 만들어야 합니다. 그리고 테스트는 멀티 프로세서

 기반에서 해야 합니다. 즉, 물리적으로 CPU가 두개인 것을 사용하지 못할때는 HyperThreading에서

 개발 및 테스트를 해야합니다. 그리고 물리적으로 컴퓨터를 따로 설치할 수가 없으면 VMWare와

 같은 OS Emulation 소프트웨어를 이용해서 테스트를 해야 합니다. 같은 로컬에서 클라이언트/서버

 테스트는 될 수 있는대로 안하는게 좋습니다.

 


제 답변이 도움이 되었다니 저도 기쁩니다.^^

 

부담갖지 마시고 질문하세요^^ 제가 아는 한 답변드리겠습니다.^^

단,  제 말이 성경책처럼 항상 옳은게 아니라 실수할 수도 있고 잘못 알고있을 수도 있습니다.

 

Q>혹시 게임서버와 시스템에 관해서 책 좀 추천해 주실 수 있을런지요?
>인테넷 주소도 좋습니다.
>
>저는 현재 경력 1년 좀 넘은 클라이언트 프로그래머입니다.
>아직 미흡한 점이 많고 잘 모르는 부분이 많습니다.
>게다가 정보력도 부족해서 인터넷에서 찾는것도 잘 못하였는데,
>경준님께서 강의해주신 것과 또 강연때 알려주신 웹사이트에서
>많은 도움을 받았습니다. 찾다가 보니 몰랐던 것이 많더군요.. ^^;
>특히 gameai.net인가요 거기서 여러가지를 알게되어 좋았습니다.
>
>다시 한번 감사를 드리며,
>바쁘시다라도 좋은 답변 부탁드립니다.
>그럼 늘 좋은 일만 있으시길 기대하며 이만 줄입니다.
>
>추신: 서버프로그래밍을 집에서 제가 테스트 하려면 어떻게 하는게 좋을런지도 조
>언 부탁드립니다.
>아니면 보다 쉽게 제가 테스트를 할수 있는 방법이 있는지도요.

 

A> 책추천 및 테스트 방법

1. Scott meyers 가 쓴 책은 전부 보세요. 정말로 좋습니다->Scott meyers는 천재

2. 최근에 번역되어서 나온 GameCoding Complete

3. Win32 멀티 스레드 프로그래밍

4. Win32 SystemProgramming

5. Gems1~4

6. Windows 구조와 원리 그리고 Codes 등등입니다.

7. MSDN 항상 최신의 것을 설치해서 변경된 것을 보세요

Q> 서버 개발

A> 서버 개발을 할때는 꼭 멀티스레드로 만들어야 합니다. 그리고 테스트는 멀티 프로세서

 기반에서 해야 합니다. 즉, 물리적으로 CPU가 두개인 것을 사용하지 못할때는 HyperThreading에서

 개발 및 테스트를 해야합니다. 그리고 물리적으로 컴퓨터를 따로 설치할 수가 없으면 VMWare와

 같은 OS Emulation 소프트웨어를 이용해서 테스트를 해야 합니다. 같은 로컬에서 클라이언트/서버

 테스트는 될 수 있는대로 안하는게 좋습니다.

 

그럼 즐거운 오후 보내세요


 

 

----------------------------------------------------------------------------------------

Q>1. VMWare와 같은 OS Emulation 소프트웨어를 사용하면 한 pc에서 서버와 클라이
언트를 동시에 사용가능하단 말씀인지요?

 

A> 네 VMWare 3.0이상을 사용하시면 OS 설치후 네트워크 아이피로 새로 하나 할당

할 수있습니다. 즉, 한 PC에 완전히 분리된 새로운 OS가 작동합니다.

 

Q>2.서버의 예제 소스들이 있는 사이트가 있을까요? 보통 채팅 예제들은 있던데

A>으로 게임서버로 확장이 가능한지요? 전부다 나와있는 사이트는 없습니다.

다만 "MMORPG Game Server Programming for Linux"라는 책에 기본동작하는 완벽한

예제 코드가 있습니다.

 

Q>3. 또한 서버는 db와 연동된다고 들었습니다. db는 어떻게 연동이 되는건지요?

A> 저는 주로 MS-SQL  2000을 이용합니다. 일반적으로 ODBC,ADO를 사용합니다.

솔직히 DB는 VisualC++ 연결해서 쿼리 또는 StoredProc를 호출하는 수준입니다.

이부분은 저도 약합니다.ㅠㅠ

----------------------------------------------------------------------------------------

Q> 크리티컬 섹션의 단점?

A> 우선 윈도우의 4가지 동기화 객체를 확실히 알고 프로그램 하시기를 권장합니다.

저도 예전에는 거의 CriticalSection을 사용했습니다. 솔직히 CriticalSection이 직관적이고

사용하기가 쉽습니다.

그리고 CriticalSection은 동기화 객체중 속도가 가장 빠르다는 장점이 있습니다.

 

CriticalSection은 커널 객체가 아닙니다.

즉, 커널이 관리하지 않습니다.

그래서 만약 CriticalSection에서 Enter한 후에 그 스레드가 정지하면

DeadLock에 빠집니다.

스레드는 커널에서 관리하기 때문에 스레드는 커널에서 지워서 없애버리지만

CriticalSection은 커널이 관리 하지 않아서 데드락에 빠집니다.

실제로 이런 버그가 발생하면 잡는것도 어렵습니다. 왜냐하면 프로세스는 죽지않고

스레드만 멈추어서 외부에서는 알아차리기가 어렵습니다.

 

또 한가지는 시간 설정입니다. 즉 뮤텍스를 사용하면 WaitForSingleObject API

를 사용해서 스레드 내에서 함수 호출 시간을 관리 할 수있습니다. 만약 100msec안에

처리 못한다면 다른 스레드에 제어권을 넘기거나 하는 여지가 있습니다.

그러나 CriticalSection은 불가능 하죠.

 

분명히 CriticalSection은 잘만 사용하면 강력합니다.

제가 권장하는 것은 최대한 짧게 CriticalSection을 사용하는 것입니다.

 

제가 생각하는 CriticalSection장단점입니다.

----------------------------------------------------------------------------------------

댓글 없음:

댓글 쓰기