4. 여러 방법 중 고르세요
• Redis를 쓰기
• 데이터 공유
• pub-sub 메시징
• ProudNet 서버쪽에 HTTP 통신 기능을 탑재
• 웹서버 쪽에 ProudNet 통신 기능을 탑재
5. Redis를 쓰기
• ProudNet 서버를 쓰는 쪽에서
• Redis C++ or C# API를 이용하여 Redis에 액세스
• 웹서버와 데이터를 공유
• 플레이 중인 플레이어 리스트
• 작동중인 서버 리스트
• 기타
• Redis의 pub-sub 메시징 기능을 이용해서 웹서버
로부터 메시지를 수신
• 웹서버에 메시지를 전달(가능하다면)
• 웹서버 쪽에서
• PHP, node.js, Java API 등 원하는 언어의 API를 이
용하여 Redis에 액세스
• 액세스 내용은 상기와 동일
Redis
ProudNe
t server
Web
server
data I/O
메시지 송수신
data I/O
메시지 송수신
6. ProudNet 서버쪽에 웹서버와 통신하는 기능
탑재하기
• 웹서버로부터 오는 요청을 처리하기
위해 NetServer를 쓰는 게임서버 프
로세스에 HTTP or TCP를 통신하는 모
듈[1]을 붙이기
• 예: MS REST SDK
• 웹서버쪽에서는 HTTP or TCP로 요청
을 보내고 프넷 서버쪽에서는 이를 수
신하여 처리
• [1]에서는 NetServer 함수를 호출
Web server
HTTP or TCP
server
NetServer
7. 웹서버 쪽에 프넷 기능을 탑재
• 웹서버에서 프넷과 통신하기 위한
NetClient를 사용
• 웹서버가 ASP.NET인 경우 NetClient C#
class를 쓰면 되고
• 웹서버가 PHP or node.js인 경우 C
plugin을 만들고 그 안에서 C++
NetClient를 사용
Web server
NetServer
NetClient
12. • WAS에서 클라들의 실시간 대전을
시작하겠다고 판단한 상황이 되었
다고 가정합니다.
WAS
Battle
Server S1
Client
C1
Client
C2 Battle
Server S2
Redis
우리 서로 배틀 붙겠다
오케이!
13. • Redis에서 가장 가벼운 배틀 서버
S1를 고름
• Redis를 사용하고 있다면, 각 서버
별 클라 수를 sorted list에 저장하
고 있으면 금방 찾을 수 있겠습니
다.
WAS
Battle
Server S1
Client
C1
Client
C2 Battle
Server S2
Redis
누가 제일 가볍니?
S1이 제일 가볍다
14. • S1에 방 R1 생성 요청 후 응답
• 이때 각 플레이어용 인증용 값을 생
성. 인증용 값은 난수.
• WAS는 생성된 인증용 값을 S1에게
알려주자
• 코드레벨 설명을 다음쪽에.
WAS
Battle
Server S1
Client
C1
Client
C2 Battle
Server S2
방 R1 만들어라
방 R1 만들었다
Redis
CREDENTIAL 랜덤값
15. • 배틀 서버에서 데이터 구조 정의가
필요합니다.
• 여기 예시에서는, 배틀 서버에 접속
한 플레이어들, 그리고 배틀 서버가
갖고 있는 방들을 정의하겠습니다.
• 개발하다보면 방 안에 플레이어들
을 열람하기도 하고, 플레이어가 속
한 방을 찾기도 합니다. 이것도 미
리 고려해 두겠습니다.
• 인증용 값을 받으면, 해당 인증용
값을 통해, "어느 방에 들어갈 어느
플레이어인지"를 찾을 수 있어야
하겠습니다. 이것도 정의합시다.
16. • 배틀 서버는 웹서버로부
터 들어오는 요청에 따라
방을 만듭니다.
• 그리고 방에 들어갈 플레
이어 각각을 위한 인증용
값을 만듭니다.
• 인증용값은 만료시간을
지정해서 오래되면 없앱
시다.
17. • 인증용 값은 암호학에서 충족
하는 난수를 만드는 것이 원칙
이나, 현실적으로는 그냥 랜덤
함수 돌려도 거의 문제 없더라
고요. 일단은 후다닥 개발해봅
시다. 랜덤함수 고고고
• 최소한 30글자 이상은 만들어
내야합니다.
18. • 그리고 나서, 플레이어들에게 S1의
R1에 들어가라고 명령하자. 웹서버
와 웹클라 사이의 메시징으로.
• 이때 앞 과정에서 만들었던 인증용
값도 같이 전달합시다.
• 이제 서버와 클라들은 인증용 값을
알고 있게 된다.
WAS
Battle
Server S1
Client
C1
Client
C2 Battle
Server S2
S1의 R1에 들어가라
With credential
Redis
19. • 플레이어들은 S1의 R1에 접속,인증,게
임플레이
• 접속은 그냥 하면 되고,
• 인증은 앞서 받은 인증용 값을 서버에
보내면 됩니다.
• 서버에서는 받은 인증용 값과 클라이
언트에서 준 인증용 값을 대조해서 해
당하는 유저가 누군지를 파악합시다.
• 다음쪽에 코드레벨 설명
WAS
Battle
Server S1
Client
C1
Client
C2 Battle
Server S2
접속,인증
With credential
접속,인증
Redis