세션형 게임의 서버 구조
로비 서버, 게임 서버, 매칭 서버, 채팅 서버 등
출처: https://www.youtube.com/watch?v=nvTV1B_Mi9k
마리오 파티 같은 보드와 미니 게임의 모음으로 이루어져 있기 때문에
수평적 분산 서버 구조가 될 것 같다.
로비 서버와 세션 서버(데디케이트)는 필수로 존재하고
필요에 따라 매칭 서버나 채팅 서버 등이 추가로 구현할 수 있겠다.
이전에 진행했던 멀티플레이 게임에서 사용했던 게임 및 유저 클래스와 세션 기능, 그리고 타워 디펜스에서 사용했던 패킷 관리 방법 등을 이용해서 임시로 테스트 서버를 만들어보려고 한다.
미끄러운 빙판이 있고, 각 모서리에 플레이어가 스폰됨.
기본 120초, 일정 시간마다 빙판의 크기가 줄어듬 ( 2번정도? )
맵 가운데에 플레이어를 튕겨내는 오브젝트(펭귄)이 있음 ( 위치 고정 )
점프 없이 vector2 사용?
맵 밖으로 이동하면 체력이 줄어듬..! ( 충돌에 대한 데미지는 없음 )
더미 클라이언트를 이용해서 패킷 교환이 정상적으로 이루어지는지 테스트 해봤다.
클라이언트 1 현재 버퍼 길이: 36
클라이언트 1 서버에서 온 패킷: S2CPlayerSpawn { playerId: 1, x: 0, z: 0, playerType: 1 }
클라이언트 1 현재 버퍼 길이: 22
클라이언트 1 서버에서 온 패킷: S2CGameStartNotification {}
클라이언트 2 현재 버퍼 길이: 58
클라이언트 2 서버에서 온 패킷: S2CPlayerSpawn { playerId: 2, x: 0, z: 0, playerType: 2 }
클라이언트 2 서버에서 온 패킷: S2CGameStartNotification {}
클라이언트 1 현재 버퍼 길이: 45
클라이언트 1 서버에서 온 패킷: S2CSyncPlayerDataNotification {
players: [
PlayerState { playerId: 2, x: 0, z: NaN, y: 1, hp: 100, state: 1 }
]
}
클라이언트 2 현재 버퍼 길이: 45
클라이언트 2 서버에서 온 패킷: S2CSyncPlayerDataNotification {
players: [
PlayerState {
playerId: 1,
x: 1.8673038482666016,
z: 7.997285842895508,
y: 1,
hp: 100,
state: 1
}
]
}
클라이언트 1 현재 버퍼 길이: 45
클라이언트 1 서버에서 온 패킷: S2CSyncPlayerDataNotification {
players: [
PlayerState {
playerId: 2,
x: 8.68913745880127,
z: 3.768244743347168,
y: 1,
hp: 100,
state: 1
}
]
}
클라이언트 2 현재 버퍼 길이: 45
클라이언트 2 서버에서 온 패킷: S2CSyncPlayerDataNotification {
players: [
PlayerState {
playerId: 1,
x: 6.565838813781738,
z: 0.7956889867782593,
y: 1,
hp: 100,
state: 1
}
]
}
캐릭터 스폰, 게임 시작, 상태 동기화 알림 등 정상적으로 패킷을 주고 받고 있다.
내일 맵 크기 변경 요청 등을 추가적으로 구현해볼 예정이다.