----------------------------------------------------------------------------------------
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. 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장단점입니다.
----------------------------------------------------------------------------------------
댓글 없음:
댓글 쓰기