SlideShare uma empresa Scribd logo
1 de 24
웹서버와 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자가 해킹 못하게.
• 서버는 인증용 값과 앞
서 받았던 인증용 값을
대조
• 대조 매칭 성공시 로그
인 성공을 판정하고 클
라에 알리자
• 매칭 안되면 로그인 실
패를 클라에 알리자
• 한편, 서버는 너무 오래된 인
증용 값을 버리도록 하자.

Mais conteúdo relacionado

Mais procurados

ASP.NET과 C#으로 개발하는 대규모 소셜 게임
ASP.NET과 C#으로 개발하는 대규모 소셜 게임ASP.NET과 C#으로 개발하는 대규모 소셜 게임
ASP.NET과 C#으로 개발하는 대규모 소셜 게임
흥배 최
 
오픈 소스를 활용한 캐쥬얼 게임 서버 프레임워크 개발
오픈 소스를 활용한 캐쥬얼 게임 서버 프레임워크 개발오픈 소스를 활용한 캐쥬얼 게임 서버 프레임워크 개발
오픈 소스를 활용한 캐쥬얼 게임 서버 프레임워크 개발
주항 박
 
게임을 위한 최적의 AWS DB 서비스 선정 퀘스트 깨기::최유정::AWS Summit Seoul 2018
게임을 위한 최적의 AWS DB 서비스 선정 퀘스트 깨기::최유정::AWS Summit Seoul 2018 게임을 위한 최적의 AWS DB 서비스 선정 퀘스트 깨기::최유정::AWS Summit Seoul 2018
게임을 위한 최적의 AWS DB 서비스 선정 퀘스트 깨기::최유정::AWS Summit Seoul 2018
Amazon Web Services Korea
 
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
devCAT Studio, NEXON
 

Mais procurados (20)

What is Game Server ?
What is Game Server ?What is Game Server ?
What is Game Server ?
 
Ndc14 분산 서버 구축의 ABC
Ndc14 분산 서버 구축의 ABCNdc14 분산 서버 구축의 ABC
Ndc14 분산 서버 구축의 ABC
 
유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기
유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기
유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기
 
ASP.NET과 C#으로 개발하는 대규모 소셜 게임
ASP.NET과 C#으로 개발하는 대규모 소셜 게임ASP.NET과 C#으로 개발하는 대규모 소셜 게임
ASP.NET과 C#으로 개발하는 대규모 소셜 게임
 
오픈 소스를 활용한 캐쥬얼 게임 서버 프레임워크 개발
오픈 소스를 활용한 캐쥬얼 게임 서버 프레임워크 개발오픈 소스를 활용한 캐쥬얼 게임 서버 프레임워크 개발
오픈 소스를 활용한 캐쥬얼 게임 서버 프레임워크 개발
 
Next-generation MMORPG service architecture
Next-generation MMORPG service architectureNext-generation MMORPG service architecture
Next-generation MMORPG service architecture
 
게임을 위한 최적의 AWS DB 서비스 선정 퀘스트 깨기::최유정::AWS Summit Seoul 2018
게임을 위한 최적의 AWS DB 서비스 선정 퀘스트 깨기::최유정::AWS Summit Seoul 2018 게임을 위한 최적의 AWS DB 서비스 선정 퀘스트 깨기::최유정::AWS Summit Seoul 2018
게임을 위한 최적의 AWS DB 서비스 선정 퀘스트 깨기::최유정::AWS Summit Seoul 2018
 
스마트폰 온라인 게임에서 고려해야 할 것들
스마트폰 온라인 게임에서 고려해야 할 것들스마트폰 온라인 게임에서 고려해야 할 것들
스마트폰 온라인 게임에서 고려해야 할 것들
 
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
 
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
 
Python 게임서버 안녕하십니까 : RPC framework 편
Python 게임서버 안녕하십니까 : RPC framework 편Python 게임서버 안녕하십니까 : RPC framework 편
Python 게임서버 안녕하십니까 : RPC framework 편
 
1인개발자가되기전알아야할것들
1인개발자가되기전알아야할것들1인개발자가되기전알아야할것들
1인개발자가되기전알아야할것들
 
실시간 게임 서버 최적화 전략
실시간 게임 서버 최적화 전략실시간 게임 서버 최적화 전략
실시간 게임 서버 최적화 전략
 
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
 
AWS for Games - 게임만을 위한 AWS 서비스 길라잡이 (레벨 200) - 진교선, 솔루션즈 아키텍트, AWS ::: Game...
AWS for Games - 게임만을 위한 AWS 서비스 길라잡이 (레벨 200) - 진교선, 솔루션즈 아키텍트, AWS :::  Game...AWS for Games - 게임만을 위한 AWS 서비스 길라잡이 (레벨 200) - 진교선, 솔루션즈 아키텍트, AWS :::  Game...
AWS for Games - 게임만을 위한 AWS 서비스 길라잡이 (레벨 200) - 진교선, 솔루션즈 아키텍트, AWS ::: Game...
 
NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현
 
쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기
 
PUBG: Battlegrounds 라이브 서비스 EKS 전환 사례 공유 [크래프톤 - 레벨 300] - 발표자: 김정헌, PUBG Dev...
PUBG: Battlegrounds 라이브 서비스 EKS 전환 사례 공유 [크래프톤 - 레벨 300] - 발표자: 김정헌, PUBG Dev...PUBG: Battlegrounds 라이브 서비스 EKS 전환 사례 공유 [크래프톤 - 레벨 300] - 발표자: 김정헌, PUBG Dev...
PUBG: Battlegrounds 라이브 서비스 EKS 전환 사례 공유 [크래프톤 - 레벨 300] - 발표자: 김정헌, PUBG Dev...
 
[NDC2017] 딥러닝으로 게임 콘텐츠 제작하기 - VAE를 이용한 콘텐츠 생성 기법 연구 사례
[NDC2017] 딥러닝으로 게임 콘텐츠 제작하기 - VAE를 이용한 콘텐츠 생성 기법 연구 사례[NDC2017] 딥러닝으로 게임 콘텐츠 제작하기 - VAE를 이용한 콘텐츠 생성 기법 연구 사례
[NDC2017] 딥러닝으로 게임 콘텐츠 제작하기 - VAE를 이용한 콘텐츠 생성 기법 연구 사례
 
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
 

Destaque

송창규, unity build로 빌드타임 반토막내기, NDC2010
송창규, unity build로 빌드타임 반토막내기, NDC2010송창규, unity build로 빌드타임 반토막내기, NDC2010
송창규, unity build로 빌드타임 반토막내기, NDC2010
devCAT Studio, NEXON
 
프라우드넷 사용법 훑어보기
프라우드넷 사용법 훑어보기프라우드넷 사용법 훑어보기
프라우드넷 사용법 훑어보기
Hyun-jik Bae
 

Destaque (20)

Unity에서 회전하는 cube 만드는 법
Unity에서 회전하는 cube 만드는 법Unity에서 회전하는 cube 만드는 법
Unity에서 회전하는 cube 만드는 법
 
웹서버와 프라우드넷 서버간 상호작용 가이드
웹서버와 프라우드넷 서버간 상호작용 가이드웹서버와 프라우드넷 서버간 상호작용 가이드
웹서버와 프라우드넷 서버간 상호작용 가이드
 
프라우드넷의 연결 유지 기능과 홀펀칭-윤현민
프라우드넷의 연결 유지 기능과 홀펀칭-윤현민프라우드넷의 연결 유지 기능과 홀펀칭-윤현민
프라우드넷의 연결 유지 기능과 홀펀칭-윤현민
 
라이브 서비스를 위한 게임 서버 구성
라이브 서비스를 위한 게임 서버 구성라이브 서비스를 위한 게임 서버 구성
라이브 서비스를 위한 게임 서버 구성
 
게임 분산 서버 구조
게임 분산 서버 구조게임 분산 서버 구조
게임 분산 서버 구조
 
KGC 2014: 클라이언트 개발자를 위한 컴퓨터 네트워크 기초 배현직
KGC 2014: 클라이언트 개발자를 위한 컴퓨터 네트워크 기초 배현직KGC 2014: 클라이언트 개발자를 위한 컴퓨터 네트워크 기초 배현직
KGC 2014: 클라이언트 개발자를 위한 컴퓨터 네트워크 기초 배현직
 
ProudNet 1.7 소개
ProudNet 1.7 소개ProudNet 1.7 소개
ProudNet 1.7 소개
 
프라우드넷의 IL2CPP 적응 기록-정종채
프라우드넷의 IL2CPP 적응 기록-정종채프라우드넷의 IL2CPP 적응 기록-정종채
프라우드넷의 IL2CPP 적응 기록-정종채
 
ProudNet IoT 제품소개서
ProudNet IoT 제품소개서ProudNet IoT 제품소개서
ProudNet IoT 제품소개서
 
ProudNet Embedded 제품소개서
ProudNet Embedded 제품소개서ProudNet Embedded 제품소개서
ProudNet Embedded 제품소개서
 
KGC 2014: 분산 게임 서버 구조론
KGC 2014: 분산 게임 서버 구조론KGC 2014: 분산 게임 서버 구조론
KGC 2014: 분산 게임 서버 구조론
 
PC 와 모바일에서의 P2P 게임 구현에서의 차이점 비교
PC 와 모바일에서의 P2P 게임 구현에서의 차이점 비교PC 와 모바일에서의 P2P 게임 구현에서의 차이점 비교
PC 와 모바일에서의 P2P 게임 구현에서의 차이점 비교
 
송창규, unity build로 빌드타임 반토막내기, NDC2010
송창규, unity build로 빌드타임 반토막내기, NDC2010송창규, unity build로 빌드타임 반토막내기, NDC2010
송창규, unity build로 빌드타임 반토막내기, NDC2010
 
iFunEngine: 30분 만에 게임 서버 만들기
iFunEngine: 30분 만에 게임 서버 만들기iFunEngine: 30분 만에 게임 서버 만들기
iFunEngine: 30분 만에 게임 서버 만들기
 
네트워크 기본
네트워크 기본네트워크 기본
네트워크 기본
 
Zookeeper 소개
Zookeeper 소개Zookeeper 소개
Zookeeper 소개
 
클라우드 기반 Unity 게임 서버 구축, 60분이면 충분하다
클라우드 기반 Unity 게임 서버 구축, 60분이면 충분하다클라우드 기반 Unity 게임 서버 구축, 60분이면 충분하다
클라우드 기반 Unity 게임 서버 구축, 60분이면 충분하다
 
프라우드넷 사용법 훑어보기
프라우드넷 사용법 훑어보기프라우드넷 사용법 훑어보기
프라우드넷 사용법 훑어보기
 
2010
20102010
2010
 
11장 인터넷의등장배경
11장 인터넷의등장배경11장 인터넷의등장배경
11장 인터넷의등장배경
 

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

AWS 클라우드 기반 게임 아키텍처 사례 - AWS Summit Seoul 2017
AWS 클라우드 기반 게임 아키텍처 사례 - AWS Summit Seoul 2017AWS 클라우드 기반 게임 아키텍처 사례 - AWS Summit Seoul 2017
AWS 클라우드 기반 게임 아키텍처 사례 - AWS Summit Seoul 2017
Amazon Web Services Korea
 
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
devCAT Studio, NEXON
 

Semelhante a 웹서버와 ProudNet 서버간 상호작용 가이드 (20)

게임 디자이너와 게임 서버
게임 디자이너와 게임 서버게임 디자이너와 게임 서버
게임 디자이너와 게임 서버
 
Kubernetes에서 Windows Application 호스팅하기
Kubernetes에서 Windows Application 호스팅하기Kubernetes에서 Windows Application 호스팅하기
Kubernetes에서 Windows Application 호스팅하기
 
Gametech 2014: 모바일 게임용 PaaS/BaaS 구현 사례와 디자인 트레이드오프
Gametech 2014: 모바일 게임용 PaaS/BaaS 구현 사례와 디자인 트레이드오프Gametech 2014: 모바일 게임용 PaaS/BaaS 구현 사례와 디자인 트레이드오프
Gametech 2014: 모바일 게임용 PaaS/BaaS 구현 사례와 디자인 트레이드오프
 
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
 
Rhea_MMO_SNG_Convergence_Server_Architecture
Rhea_MMO_SNG_Convergence_Server_ArchitectureRhea_MMO_SNG_Convergence_Server_Architecture
Rhea_MMO_SNG_Convergence_Server_Architecture
 
[NDC 2017] 이카루스 북미 : 베타서비스 활용법
[NDC 2017] 이카루스 북미 : 베타서비스 활용법[NDC 2017] 이카루스 북미 : 베타서비스 활용법
[NDC 2017] 이카루스 북미 : 베타서비스 활용법
 
Journey to Windows Kubernetes
Journey to Windows KubernetesJourney to Windows Kubernetes
Journey to Windows Kubernetes
 
Browser Engineering - Ch1 Summary
Browser Engineering - Ch1 SummaryBrowser Engineering - Ch1 Summary
Browser Engineering - Ch1 Summary
 
[IGC2018] 에이스프로젝트 안현석 - 유니티로 실시간 멀티플레이 게임서버를 만들수 있을까
[IGC2018] 에이스프로젝트 안현석 - 유니티로 실시간 멀티플레이 게임서버를 만들수 있을까[IGC2018] 에이스프로젝트 안현석 - 유니티로 실시간 멀티플레이 게임서버를 만들수 있을까
[IGC2018] 에이스프로젝트 안현석 - 유니티로 실시간 멀티플레이 게임서버를 만들수 있을까
 
[IGC2018] 에이스프로젝트 안현석 - 유니티로 실시간 멀티플레이 게임서버를 만들 수 있을까?
[IGC2018] 에이스프로젝트 안현석 - 유니티로 실시간 멀티플레이 게임서버를 만들 수 있을까?[IGC2018] 에이스프로젝트 안현석 - 유니티로 실시간 멀티플레이 게임서버를 만들 수 있을까?
[IGC2018] 에이스프로젝트 안현석 - 유니티로 실시간 멀티플레이 게임서버를 만들 수 있을까?
 
AWS 클라우드 기반 게임 아키텍처 사례 - AWS Summit Seoul 2017
AWS 클라우드 기반 게임 아키텍처 사례 - AWS Summit Seoul 2017AWS 클라우드 기반 게임 아키텍처 사례 - AWS Summit Seoul 2017
AWS 클라우드 기반 게임 아키텍처 사례 - AWS Summit Seoul 2017
 
[D2 CAMPUS]웹 개발자의 스펙 : HTTP
[D2 CAMPUS]웹 개발자의 스펙 : HTTP[D2 CAMPUS]웹 개발자의 스펙 : HTTP
[D2 CAMPUS]웹 개발자의 스펙 : HTTP
 
AWS를 활용해서 글로벌 게임 런칭하기 - 박진성 AWS 솔루션즈 아키텍트 :: AWS Summit Seoul 2021
AWS를 활용해서 글로벌 게임 런칭하기 - 박진성 AWS 솔루션즈 아키텍트 :: AWS Summit Seoul 2021AWS를 활용해서 글로벌 게임 런칭하기 - 박진성 AWS 솔루션즈 아키텍트 :: AWS Summit Seoul 2021
AWS를 활용해서 글로벌 게임 런칭하기 - 박진성 AWS 솔루션즈 아키텍트 :: AWS Summit Seoul 2021
 
[아이펀팩토리] 클라이언트 개발자, 서버 개발 시작하기
[아이펀팩토리] 클라이언트 개발자, 서버 개발 시작하기 [아이펀팩토리] 클라이언트 개발자, 서버 개발 시작하기
[아이펀팩토리] 클라이언트 개발자, 서버 개발 시작하기
 
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
 
삶이편해지는_백엔드_개발자_지식.pdf
삶이편해지는_백엔드_개발자_지식.pdf삶이편해지는_백엔드_개발자_지식.pdf
삶이편해지는_백엔드_개발자_지식.pdf
 
TCP/IP Protocol - JAVA
TCP/IP Protocol - JAVATCP/IP Protocol - JAVA
TCP/IP Protocol - JAVA
 
BRK3713 - Microsoft Azure에서 Windows와 Linux를 동시에 사용하는 하이브리드 Kubernetes 클러스터 구축
BRK3713 - Microsoft Azure에서 Windows와 Linux를 동시에 사용하는 하이브리드 Kubernetes 클러스터 구축BRK3713 - Microsoft Azure에서 Windows와 Linux를 동시에 사용하는 하이브리드 Kubernetes 클러스터 구축
BRK3713 - Microsoft Azure에서 Windows와 Linux를 동시에 사용하는 하이브리드 Kubernetes 클러스터 구축
 
20150115 AWS BlackBelt - Amazon VPC (Korea)
20150115 AWS BlackBelt - Amazon VPC (Korea)20150115 AWS BlackBelt - Amazon VPC (Korea)
20150115 AWS BlackBelt - Amazon VPC (Korea)
 
7. 게임 스트리밍 서비스를 위한 아키텍처 - 언리얼 엔진을 중심으로! [레벨 300] - 발표자: 하흥수, 솔루션즈 아키텍트, AWS :...
7.	게임 스트리밍 서비스를 위한 아키텍처 - 언리얼 엔진을 중심으로! [레벨 300] - 발표자: 하흥수, 솔루션즈 아키텍트, AWS :...7.	게임 스트리밍 서비스를 위한 아키텍처 - 언리얼 엔진을 중심으로! [레벨 300] - 발표자: 하흥수, 솔루션즈 아키텍트, AWS :...
7. 게임 스트리밍 서비스를 위한 아키텍처 - 언리얼 엔진을 중심으로! [레벨 300] - 발표자: 하흥수, 솔루션즈 아키텍트, AWS :...
 

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

  • 2. 여기서 설명할 내용 • 웹서버 기반 기존 개발물을 최대한 그대로 유지하면서 • 프라우드넷 기반 실시간 멀티플레이 기능을 추가하는 방법 web server game client ProudNet server Interop! proudnet protocol HTTP
  • 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
  • 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. • 한편, 서버는 너무 오래된 인 증용 값을 버리도록 하자.