[게임 서버] 5.7 게임 플레이 이외의 네트워킹
카테고리: GameServer
태그: GameServer
📦 5. 게임 네트워킹
👉🏻 7. 게임 플레이 이외의 네트워킹
💡 개발 팁
시퀀스 다이어그램을 그리며 개발하는 것이 좋다
🔐 로그온 과정
---
config:
look: handDrawn
theme: dark
layout: dagre
---
sequenceDiagram
Participant C as 클라이언트
Participant S as 서버
Participant D as 데이터베이스
C->>S: ① RequestLogon()
activate S
deactivate S
S->>D: ② get user id/pw()
activate D
deactivate D
D->>S: ③ user id/pw()
activate S
deactivate S
S->>C: ④ Logon ok/fail()
activate C
deactivate C
S->>D: ⑤ get player data()
activate D
deactivate D
D->>S: ⑥ player data()
activate S
deactivate S
과정:
- 로그온 요청 메시지를 서버로 전송
- 서버는 파일이나 데이터베이스에서 해당 유저의 ID와 비밀번호를 받아서 식별
- 식별 결과를 클라이언트에 통보
- 성공 시 플레이어 정보를 데이터베이스에서 로딩해 게임 서버 메모리에 보관
👤 캐릭터 생성/선택 과정
---
config:
look: handDrawn
theme: dark
layout: dagre
---
sequenceDiagram
Participant C as 클라이언트
Participant S as 서버
Participant D as 데이터베이스
C->>S: ① RequestCreateCharacter()
activate S
deactivate S
S->>D: ② insert character record()
activate D
deactivate D
D->>S: ③ insert ok()
activate S
deactivate S
S->>C: ④ NotifyCharacter<br>CreateSuccess/Fail()
activate C
deactivate C
C->>S: ⑤ RequestSelectCharacter()
activate S
deactivate S
S->>D: ⑥ update character<br>selection record()
activate D
deactivate D
S->>C: ⑦ NotifySelectCharacter<br>Success/Fail()
activate C
deactivate C
생성 과정:
- 클라이언트는 서버에 캐릭터 생성 요청
- 서버는 데이터베이스에 새 캐릭터 개체 생성 요청
- 데이터베이스는 서버에 생성 요청 성공 여부 반환 (동일 캐릭터가 있으면 실패)
- 서버는 클라이언트에 성공 여부 통지
선택 과정:
- 클라이언트는 서버에 캐릭터 선택 요청
- 서버는 데이터베이스에 캐릭터 선택 기록 (존재하는 정보 기반이라 즉시 성공)
- 서버는 클라이언트에 캐릭터 선택 성공 여부 반환
🎮 매치메이킹
---
config:
look: handDrawn
theme: dark
layout: dagre
---
sequenceDiagram
Participant C1 as 클라이언트 1
Participant S as 서버
Participant C2 as 클라이언트 2
C1->>S: ① 방 생성 요청
activate S
deactivate S
S->>C1: ② 방 생성 성공 여부 통지
activate C1
deactivate C1
S->>C2: ③ 누군가 방을 만듬
activate C2
deactivate C2
C2->>S: ④ 방 참여 요청
activate S
deactivate S
S->>C2: ⑤ 방 참여 성공 여부 통지
activate C2
deactivate C2
S->>C1: ⑥ 누군가 방에 들어왔다고 통지
activate C1
deactivate C1
C1->>S: ⑦ 게임 시작 요청
activate S
deactivate S
S->>C2: ⑧ 게임 시작 통지
activate C2
deactivate C2
S->>C1: ⑨ 게임 시작 통지
activate C1
deactivate C1
핵심 원칙:
- 방 입장/목록은 클라이언트가 아닌 서버에서 판단
- 클라이언트는 서버에게 요청하고 결과에 따라 행동
- 서버는 요청 판단 후 영향받는 모든 클라이언트에게 통보
🎁 아이템 사용
---
config:
look: handDrawn
theme: dark
layout: dagre
---
flowchart TB
subgraph Server[서버]
S1([유효한 플레이어인가?])
S2([플레이어가 해당 아이템을 갖고 있는가?])
S3(["아이템 개수를 1개 줄인다"])
S4(["'아이템 개수가 N개가 되었다.'를 송신"])
S5(["플레이어의 상태를 변경"])
S6(["플레이어의 상태 XX가 OO로 바뀌었음을 송신"])
S1 --> S2
S2 --> S3
S3 --> S4
S4 --> S5
S5 --> S6
end
C2 --> S1
S4 --> C3
S6 --> C4
subgraph Client[클라이언트]
C1([아이템 클릭])
C2(["'아이템을 사용하라.' 를 서버에 송신"])
C3(["해당 아이템의 개수를 N으로 변경"])
C4(["플레이어의 상태를 변경"])
C1 --> C2
end
과정:
- 클라이언트는 서버에게 아이템ID를 담은 메시지 전송
- 서버는 플레이어 사용 가능 여부 판단 후 사용 결과 판정
- 서버는 클라이언트에게 아이템 사용됨 통지
🧐 정리
공통 패턴:
- 클라이언트 → 서버: 요청
- 서버: 검증 및 판단
- 서버 → 클라이언트(들): 결과 통보
- 모든 중요한 판단은 서버에서 수행
댓글남기기