웹서버와 ProudNet 서버간
상호작용 가이드
넷텐션
여기서 설명할 내용
• 웹서버 기반 기존 개발물을 최대한
그대로 유지하면서
• 프라우드넷 기반 실시간 멀티플레이
기능을 추가하는 방법
web
server
game client
ProudNet
server
Interop!
proudnet protocol
HTTP
웹서버-프라우드넷 서버간 대
화 방법
여러 방법 중 고르세요
• Redis를 쓰기
• 데이터 공유
• pub-sub 메시징
• ProudNet 서버쪽에 HTTP 통신 기능을 탑재
• 웹서버 쪽에 ProudNet 통신 기능을 탑재
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
메시지 송수신
ProudNet 서버쪽에 웹서버와 통신하는 기능
탑재하기
• 웹서버로부터 오는 요청을 처리하기
위해 NetServer를 쓰는 게임서버 프
로세스에 HTTP or TCP를 통신하는 모
듈[1]을 붙이기
• 예: MS REST SDK
• 웹서버쪽에서는 HTTP or TCP로 요청
을 보내고 프넷 서버쪽에서는 이를 수
신하여 처리
• [1]에서는 NetServer 함수를 호출
Web server
HTTP or TCP
server
NetServer
웹서버 쪽에 프넷 기능을 탑재
• 웹서버에서 프넷과 통신하기 위한
NetClient를 사용
• 웹서버가 ASP.NET인 경우 NetClient C#
class를 쓰면 되고
• 웹서버가 PHP or node.js인 경우 C
plugin을 만들고 그 안에서 C++
NetClient를 사용
Web server
NetServer
NetClient
웹서버-실시간 배틀 상호작용
구현 예
• 실시간 배틀 서버를 NetServer 기
반으로 여럿 구동 WAS
Battle
Server S1
Battle
Server S2
Redis
• 평소에는, 각 배틀 서버의
동시접속자수를 Redis에
업데이트합니다.
• 다음쪽에 코드레벨 설명
WAS
Battle
Server S1
Battle
Server S2
Redis
나 동접 OO이야~
(Sorted Set) BattleServers =
[ B1 ooo B2 ooo ]
Hashset BattleServer:B1 =
UserCount:xxx
endpoint: xx.xx.xx.xx:xxxx
• 유저의 수가 증가하거나 감소
할 때마다 Redis에 알려주면
되겠습니다.
• WAS에서 클라들의 실시간 대전을
시작하겠다고 판단한 상황이 되었
다고 가정합니다.
WAS
Battle
Server S1
Client
C1
Client
C2 Battle
Server S2
Redis
우리 서로 배틀 붙겠다
오케이!
• Redis에서 가장 가벼운 배틀 서버
S1를 고름
• Redis를 사용하고 있다면, 각 서버
별 클라 수를 sorted list에 저장하
고 있으면 금방 찾을 수 있겠습니
다.
WAS
Battle
Server S1
Client
C1
Client
C2 Battle
Server S2
Redis
누가 제일 가볍니?
S1이 제일 가볍다
• S1에 방 R1 생성 요청 후 응답
• 이때 각 플레이어용 인증용 값을 생
성. 인증용 값은 난수.
• WAS는 생성된 인증용 값을 S1에게
알려주자
• 코드레벨 설명을 다음쪽에.
WAS
Battle
Server S1
Client
C1
Client
C2 Battle
Server S2
방 R1 만들어라
방 R1 만들었다
Redis
CREDENTIAL 랜덤값
• 배틀 서버에서 데이터 구조 정의가
필요합니다.
• 여기 예시에서는, 배틀 서버에 접속
한 플레이어들, 그리고 배틀 서버가
갖고 있는 방들을 정의하겠습니다.
• 개발하다보면 방 안에 플레이어들
을 열람하기도 하고, 플레이어가 속
한 방을 찾기도 합니다. 이것도 미
리 고려해 두겠습니다.
• 인증용 값을 받으면, 해당 인증용
값을 통해, "어느 방에 들어갈 어느
플레이어인지"를 찾을 수 있어야
하겠습니다. 이것도 정의합시다.
• 배틀 서버는 웹서버로부
터 들어오는 요청에 따라
방을 만듭니다.
• 그리고 방에 들어갈 플레
이어 각각을 위한 인증용
값을 만듭니다.
• 인증용값은 만료시간을
지정해서 오래되면 없앱
시다.
• 인증용 값은 암호학에서 충족
하는 난수를 만드는 것이 원칙
이나, 현실적으로는 그냥 랜덤
함수 돌려도 거의 문제 없더라
고요. 일단은 후다닥 개발해봅
시다. 랜덤함수 고고고
• 최소한 30글자 이상은 만들어
내야합니다.
• 그리고 나서, 플레이어들에게 S1의
R1에 들어가라고 명령하자. 웹서버
와 웹클라 사이의 메시징으로.
• 이때 앞 과정에서 만들었던 인증용
값도 같이 전달합시다.
• 이제 서버와 클라들은 인증용 값을
알고 있게 된다.
WAS
Battle
Server S1
Client
C1
Client
C2 Battle
Server S2
S1의 R1에 들어가라
With credential
Redis
• 플레이어들은 S1의 R1에 접속,인증,게
임플레이
• 접속은 그냥 하면 되고,
• 인증은 앞서 받은 인증용 값을 서버에
보내면 됩니다.
• 서버에서는 받은 인증용 값과 클라이
언트에서 준 인증용 값을 대조해서 해
당하는 유저가 누군지를 파악합시다.
• 다음쪽에 코드레벨 설명
WAS
Battle
Server S1
Client
C1
Client
C2 Battle
Server S2
접속,인증
With credential
접속,인증
Redis
• 웹서버로부터 인증용 값을 받
으면, 배틀 서버에 연결
• 서버는 클라의 연결을 받음
• 클라는 서버와 연결되면 인증
용 값을 전달
• 암호화해서 보내도록 하자. 제
3자가 해킹 못하게.
• 서버는 인증용 값과 앞
서 받았던 인증용 값을
대조
• 대조 매칭 성공시 로그
인 성공을 판정하고 클
라에 알리자
• 매칭 안되면 로그인 실
패를 클라에 알리자
• 한편, 서버는 너무 오래된 인
증용 값을 버리도록 하자.

웹서버와 ProudNet 서버간 상호작용 가이드

  • 1.
  • 2.
    여기서 설명할 내용 •웹서버 기반 기존 개발물을 최대한 그대로 유지하면서 • 프라우드넷 기반 실시간 멀티플레이 기능을 추가하는 방법 web server game client ProudNet server Interop! proudnet protocol HTTP
  • 3.
  • 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
  • 8.
  • 9.
    • 실시간 배틀서버를 NetServer 기 반으로 여럿 구동 WAS Battle Server S1 Battle Server S2 Redis
  • 10.
    • 평소에는, 각배틀 서버의 동시접속자수를 Redis에 업데이트합니다. • 다음쪽에 코드레벨 설명 WAS Battle Server S1 Battle Server S2 Redis 나 동접 OO이야~ (Sorted Set) BattleServers = [ B1 ooo B2 ooo ] Hashset BattleServer:B1 = UserCount:xxx endpoint: xx.xx.xx.xx:xxxx
  • 11.
    • 유저의 수가증가하거나 감소 할 때마다 Redis에 알려주면 되겠습니다.
  • 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
  • 20.
    • 웹서버로부터 인증용값을 받 으면, 배틀 서버에 연결
  • 21.
    • 서버는 클라의연결을 받음
  • 22.
    • 클라는 서버와연결되면 인증 용 값을 전달 • 암호화해서 보내도록 하자. 제 3자가 해킹 못하게.
  • 23.
    • 서버는 인증용값과 앞 서 받았던 인증용 값을 대조 • 대조 매칭 성공시 로그 인 성공을 판정하고 클 라에 알리자 • 매칭 안되면 로그인 실 패를 클라에 알리자
  • 24.
    • 한편, 서버는너무 오래된 인 증용 값을 버리도록 하자.