http://forums.xna.com/forums/t/37129.aspx
XNA로 MMO게임을 만들 수 없을까에 대한 잡설들인데, 읽다보니 재미있다. XNA게임 특히 Xbox 360으로 배포되는 게임의 경우 M$는 보안이나 기타 이유로 인하여 다양한 제약을 걸어둔다.
- 네트워크 API로 특정 IP로 접속하는 기능이 없다. (무조건 Live 서버로 접속됨)
- 라이브서버 특징상 한방당 32명 정원
- 방은 Persistance하지 않다. (인스턴스하다. 서버 내에 뭔가를 남길 수가 없다.)
- 정보역시 유저 로컬에 쌓이지 서버레벨에서 저장할 방법이 없다.
- 퍼블리시된 게임은 같은 게임끼리만 통신이 가능
이런 제약에도 불구하고, 포럼에 등장한 다양한 아이디어는,
- 여러대의 엑박을 서버로서 켜두고 Persistant하게 만들자
- 32명 정원의 공간을 여러개 만들어 잇자
하지만, 이정도로는 문제가 있는것이 같은 게임에서 다양한 공간이 만들어질 방법이 필요하고, 유저정보를 저장할 서버레벨의 공간이 필요하다는 점이다. 그래서 생각해보건데,
1. 한 게임내에 여러 공간에 대한 정보를 넣는다.
2. 게임의 로직에 따라 처음 실행되면 해당 게임의 네트웍 로비의 갯수를 센다
3. 공간갯수 Constant 값, MAX_SPACE으로 이어질 공간의 갯수만큼 없을 경우 자동으로 32명 정원 서버가 되며 방이름(혹은 갯수)정보에 맞는 위치의 공간으로 로드된다.
4. 방 갯수가 MAX_SPACE 값이 넘어갈 경우 자동으로 게임인트로가 나오며 게임이 실행된다.
5. 서버로 할당된 초기 MAX_SPACE 만큼의 서버는 들락거리는 유저의 정보를 내부 콘솔에 쌓아두고, 해당 위치 내에서의 모든 행동을 기록한다. 예를 들어 퀘스트 수행여부.
6. (세이브가 해킹되지 않는다는 전제하에) 유저의 아이템이나 기타 정보들은 로컬에 저장된다.
7. 특정 위치 (문이나 계곡 입구)에 들어가면 자동으로 로드되며 해당 방으로 이동한다. 정원초과인 경우 메시지를 보여준다.
해당 게임이 심사를 통과해서 퍼블릭으로 나오면, 운영자(개발자)는 재빨리 준비해둔(?) 콘솔들을 켜고 먼저 게임을 다운 받아서 실행한다. (그리고, 그 콘솔들은 영원히 끌 수 없다;) 한명이라도 다른 유저가 먼저 실행하면 방이 없어질때까지 가동이 불가; 따라서, 일반 유저들은 1,2,3을 보지 못한채 MMO게임을 즐기게 되지 않을까라는 상상을 하게 됐다는 얘기.
덧으로, 초기 콘솔에는 유저 상황을 모니터할 수 있는 화면이 뜨고 운영자가 이를 수기로 기록해서 합산한다음 별도 서버에서 랭킹을 매길 수도 있겠다는 생각까지.