SlideShare a Scribd company logo
1st node.js Korea conference



MMORPG에서의 node.js를 이용한
            커뮤니티 설계
                        11.20.2012
                      드래곤플라이
                 rhea@dfgame.co.kr




                                       2012.11.20
About Me

 Game Developer

   98~
   2004~10 NeowizGames
   2010~11 네시삼십삼분
   2012~ Dragonfly
   Technical Director

 http://www.gamedevforever.com/
                                   Page 2
Current




          Page 3
IRC




      Page 4
TCP




      Page 5
Tragedy of WIFI & 3G




                       Page 6
REST

 이럴봐엔 차라리 Comet을 쓰겠어!




 그런데 PC, 스마트폰 같이 되었으면 좋겠네.
                          Page 7
WebScoket

 아!!




            Page 8
WebSocket




            Page 9
Mercury Project

 Legacy RPC와 REST API를 한번에 찍어내고
 싶다.
 node.js로 이렇게 저렇게 하면 될 것 같은데
 …?

 Mercury Project
  – Node.js를 이용한 MMO 커뮤니티 프로젝트
  – 스마트 디바이스 지원
  – 한번에 REST, Socket RPC를 뽑고 싶다.


                                   Page 10
node.js


     Common Server         Node.js

      Script Engine
                       JavaScript Based
          Based
                           Contents
        Contents

       Lua, Python            V8
      Script Engine    JavaScript Engine
         By C++             By C++


           C++ or C#        C++
          IOCP Model     IOCP Model



                                           Page 11
I/O Model

 윈도우 서버의 1차 임무

 완벽한 비동기 I/O
 I/O CompletePort
  – 게임 서버 개발자 면접 볼 때의 hello world
  – 가장 쓰레드를 적게 쓰면서 수천개의 소켓 이벤트 획득
  – I/O는 비동기. Send/Recv는 일단 리턴한다.




                                    Page 12
IOCP: node.js




                Page 13
Benchmark

 Boost::Asio vs. Node.js
총 데이터(Recv/Send) : 516,000,000/516,000,000

 시도     서버     연결 개수       메모리(Max)        CPU(Max)   스레드   서버 총 처리 시간     클라 총 Send 시간     클라 총 Recv 시간

      Asio          1000         276,544         25     2           0:55             0:39             0:54
 1차
      Node          1000         665,004         12     3           1:04             1:02             1:07

      Asio          1000         276,496         25     2           0:57             0:40             0:55
 2차
      Node          1000         664,596         12     4           1:05             1:02             1:06

      Asio          1000         276,420         25     2           1:05             0:45             1:02
 3차
      Node          1000         662,024         13     4           1:16             1:14             1:20



 메모리를 더 차지하나 속력은 만족
      – V8의 메모리

                                                                                                     Page 14
net module vs. Socket.IO

 채팅서버
 성능이 아닌 개발의 편의성
 클라이언트 vs. 서버

 Socket.IO
  – Websocket
  – Smart Phone
  – Rooms



                           Page 15
Socket.IO

 벤치마킹
  –   CPU E5-2650 2.00Ghz(2 processors)
  –    4.00 GB
  –    x64 Windwos Server
  –    153byte Echo test
   접속수           2253         3257        4053

   초당 에코성공       1690         2178        2681

   초당 에코성공       1741         2174        2612

   초당 에코성공       1684         2225        2225




                                                 Page 16
Pub/Sub

 Socket.IO의 친구 Redis
 동접의 증가를 고려





                        Page 17
MS Open Tech




               Page 18
IOCP: Redis




              Page 19
Basic Community System


        CMN1
    (node.js/Socket.I
           O)
                                              CBS
                                            (Redis)

        CMN2
   (node.js/Socket.IO)




                         Push Gateway(C#)




                                                      Page 20
Native Problem

 Win32 Client에서는 어떻게 받지?

 WebSocket을 C/C++로 구현
 RFC 6455 및 Socket.IO 프로토콜 직접 구현




                                Page 21
Websocket Protocol

 Websocket Protcol
 애당초 http, ftp, ws라는 것은 없다

    • 서버 접속
    • Session ID와 Transport ID 받음
    • Socket 혹은 XMLHTTPRequest로 받을 것인지 선택
        – XMLHTTPRequest라면 클라이언트가 계속 폴링
        – Socket이라면 새 Transport 연결 획득
    • 지정된 시간만큼 핸드쉐이킹
    • Socket.IO 프로토콜 추가




                                            Page 22
Websocket Protocol

 Socket.IO 클라이언트( js)가 하는 일




                               Page 23
Websocket Protocol
GET /mychat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key:
x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Protocol: chat
Sec-WebSocket-Version: 13
Origin: http://example.com




                               Page 24
Websocket Protocol




                     Page 25
Caloris

https://github.com/RheaStrike/Caloris
   – Socket.IO용 Win32 C++ 클라이언트 라이브러리




                                         Page 26
Demo




       Page 27
REST API

 node.js?
 ASP.NET
  – 왜죠?




             Page 28
Socket.IO

 I/O 문제 해결
 모바일 환경에서 Connection 문제 해결
 접근은 쉽다

 그러나…
  –   표현이 된다고 끝이 아니다.
  –   빈약한 자료구조, C++에 비해 부족한 함수
  –   싱글 쓰레드
  –   아예 C++로 플러그인을 만들어 버릴까
  –   HeartBeat을 안젂하게 처리할 새로운 프로토콜 개발

                                        Page 29
Appropriate Technology




      •   C++은 여전히 최고의 도구
      •   기술의 진보
      •   개발자와 사용자를 위한 적정기술
      •   실험과 대안




                              Page 30
End




      감사합니다.




                Page 31

More Related Content

What's hot

Node.js 현재와 미래
Node.js 현재와 미래Node.js 현재와 미래
Node.js 현재와 미래
JeongHun Byeon
 
Beejei node.js & web service
Beejei   node.js & web serviceBeejei   node.js & web service
Beejei node.js & web service
Bumjin Kim
 
세션3 node.js의 의미와 자바의 대안
세션3 node.js의 의미와 자바의 대안세션3 node.js의 의미와 자바의 대안
세션3 node.js의 의미와 자바의 대안
Lee Ji Eun
 
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드Jeongsang Baek
 
Node.js 시작하기
Node.js 시작하기Node.js 시작하기
Node.js 시작하기
Huey Park
 
Ryan Dahl의 Node.js 소개 동영상 해설 by doortts
Ryan Dahl의 Node.js 소개 동영상 해설 by doorttsRyan Dahl의 Node.js 소개 동영상 해설 by doortts
Ryan Dahl의 Node.js 소개 동영상 해설 by doortts
Suwon Chae
 
Node.js at OKJSP
Node.js at OKJSPNode.js at OKJSP
Node.js at OKJSP
JeongHun Byeon
 
[111217 아꿈사연말모임] 웹소켓과온라인게임
[111217 아꿈사연말모임] 웹소켓과온라인게임[111217 아꿈사연말모임] 웹소켓과온라인게임
[111217 아꿈사연말모임] 웹소켓과온라인게임
sung ki choi
 
Node.js
Node.jsNode.js
Node.js
ymtech
 
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스
Dan Kang (강동한)
 
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
Jeongsang Baek
 
Javascript everywhere - Node.js | Devon 2012
Javascript everywhere - Node.js | Devon 2012Javascript everywhere - Node.js | Devon 2012
Javascript everywhere - Node.js | Devon 2012Daum DNA
 
Azure로 MMO게임 서비스하기
Azure로 MMO게임 서비스하기Azure로 MMO게임 서비스하기
Azure로 MMO게임 서비스하기
YEONG-CHEON YOU
 
공성대전 C# 사용기
공성대전 C# 사용기공성대전 C# 사용기
공성대전 C# 사용기Myoung-gyu Gang
 
Play node conference
Play node conferencePlay node conference
Play node conference
John Kim
 
Node.js의 도입과 활용
Node.js의 도입과 활용Node.js의 도입과 활용
Node.js의 도입과 활용
Jin wook
 
오픈 소스를 활용한 캐쥬얼 게임 서버 프레임워크 개발
오픈 소스를 활용한 캐쥬얼 게임 서버 프레임워크 개발오픈 소스를 활용한 캐쥬얼 게임 서버 프레임워크 개발
오픈 소스를 활용한 캐쥬얼 게임 서버 프레임워크 개발주항 박
 
Leadweb Nodejs
Leadweb NodejsLeadweb Nodejs
Leadweb Nodejs
근호 최
 
NODE.JS 글로벌 기업 적용 사례 그리고, real-time 어플리케이션 개발하기
NODE.JS 글로벌 기업 적용 사례  그리고, real-time 어플리케이션 개발하기NODE.JS 글로벌 기업 적용 사례  그리고, real-time 어플리케이션 개발하기
NODE.JS 글로벌 기업 적용 사례 그리고, real-time 어플리케이션 개발하기
John Kim
 
Nodejs 발표자료
Nodejs 발표자료Nodejs 발표자료
Nodejs 발표자료
shanka2
 

What's hot (20)

Node.js 현재와 미래
Node.js 현재와 미래Node.js 현재와 미래
Node.js 현재와 미래
 
Beejei node.js & web service
Beejei   node.js & web serviceBeejei   node.js & web service
Beejei node.js & web service
 
세션3 node.js의 의미와 자바의 대안
세션3 node.js의 의미와 자바의 대안세션3 node.js의 의미와 자바의 대안
세션3 node.js의 의미와 자바의 대안
 
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
 
Node.js 시작하기
Node.js 시작하기Node.js 시작하기
Node.js 시작하기
 
Ryan Dahl의 Node.js 소개 동영상 해설 by doortts
Ryan Dahl의 Node.js 소개 동영상 해설 by doorttsRyan Dahl의 Node.js 소개 동영상 해설 by doortts
Ryan Dahl의 Node.js 소개 동영상 해설 by doortts
 
Node.js at OKJSP
Node.js at OKJSPNode.js at OKJSP
Node.js at OKJSP
 
[111217 아꿈사연말모임] 웹소켓과온라인게임
[111217 아꿈사연말모임] 웹소켓과온라인게임[111217 아꿈사연말모임] 웹소켓과온라인게임
[111217 아꿈사연말모임] 웹소켓과온라인게임
 
Node.js
Node.jsNode.js
Node.js
 
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스
 
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
 
Javascript everywhere - Node.js | Devon 2012
Javascript everywhere - Node.js | Devon 2012Javascript everywhere - Node.js | Devon 2012
Javascript everywhere - Node.js | Devon 2012
 
Azure로 MMO게임 서비스하기
Azure로 MMO게임 서비스하기Azure로 MMO게임 서비스하기
Azure로 MMO게임 서비스하기
 
공성대전 C# 사용기
공성대전 C# 사용기공성대전 C# 사용기
공성대전 C# 사용기
 
Play node conference
Play node conferencePlay node conference
Play node conference
 
Node.js의 도입과 활용
Node.js의 도입과 활용Node.js의 도입과 활용
Node.js의 도입과 활용
 
오픈 소스를 활용한 캐쥬얼 게임 서버 프레임워크 개발
오픈 소스를 활용한 캐쥬얼 게임 서버 프레임워크 개발오픈 소스를 활용한 캐쥬얼 게임 서버 프레임워크 개발
오픈 소스를 활용한 캐쥬얼 게임 서버 프레임워크 개발
 
Leadweb Nodejs
Leadweb NodejsLeadweb Nodejs
Leadweb Nodejs
 
NODE.JS 글로벌 기업 적용 사례 그리고, real-time 어플리케이션 개발하기
NODE.JS 글로벌 기업 적용 사례  그리고, real-time 어플리케이션 개발하기NODE.JS 글로벌 기업 적용 사례  그리고, real-time 어플리케이션 개발하기
NODE.JS 글로벌 기업 적용 사례 그리고, real-time 어플리케이션 개발하기
 
Nodejs 발표자료
Nodejs 발표자료Nodejs 발표자료
Nodejs 발표자료
 

Viewers also liked

Testing nodejs apps
Testing nodejs appsTesting nodejs apps
Testing nodejs appsfelipefsilva
 
(GameTech2015) Live Operation by Adbrix의 Node.js와 MongoDB를 이용한 멀티테넌트 인프라 구축사례
(GameTech2015) Live Operation by Adbrix의 Node.js와 MongoDB를 이용한 멀티테넌트 인프라 구축사례(GameTech2015) Live Operation by Adbrix의 Node.js와 MongoDB를 이용한 멀티테넌트 인프라 구축사례
(GameTech2015) Live Operation by Adbrix의 Node.js와 MongoDB를 이용한 멀티테넌트 인프라 구축사례
Jeongsang Baek
 
Amazon web service를 활용한 모바일 게임 서버 개발 퍼즐 주주의 사례를 중심으로
Amazon web service를 활용한 모바일 게임 서버 개발   퍼즐 주주의 사례를 중심으로Amazon web service를 활용한 모바일 게임 서버 개발   퍼즐 주주의 사례를 중심으로
Amazon web service를 활용한 모바일 게임 서버 개발 퍼즐 주주의 사례를 중심으로
Seok-ju Yun
 
Inside node.js
Inside node.jsInside node.js
Inside node.js
Jeongsang Baek
 
[NDC16] (애드브릭스) 라이브마이그레이션 분투기 - 달리는 분석 툴의 바퀴를 갈아 끼워보자!
[NDC16] (애드브릭스) 라이브마이그레이션 분투기 - 달리는 분석 툴의 바퀴를 갈아 끼워보자![NDC16] (애드브릭스) 라이브마이그레이션 분투기 - 달리는 분석 툴의 바퀴를 갈아 끼워보자!
[NDC16] (애드브릭스) 라이브마이그레이션 분투기 - 달리는 분석 툴의 바퀴를 갈아 끼워보자!
Jeongsang Baek
 
Project bs oss
Project bs ossProject bs oss
Project bs oss
Seung-Hyun PAEK
 
[Hello world 오픈세미나]n grinder helloworld발표자료_저작권free
[Hello world 오픈세미나]n grinder helloworld발표자료_저작권free[Hello world 오픈세미나]n grinder helloworld발표자료_저작권free
[Hello world 오픈세미나]n grinder helloworld발표자료_저작권freeNAVER D2
 
[Hello world 오픈세미나]vertx&socket io
[Hello world 오픈세미나]vertx&socket io[Hello world 오픈세미나]vertx&socket io
[Hello world 오픈세미나]vertx&socket ioNAVER D2
 
야생의 땅: 듀랑고의 시뮬레이션 MMO 샌드박스 설계
야생의 땅: 듀랑고의 시뮬레이션 MMO 샌드박스 설계야생의 땅: 듀랑고의 시뮬레이션 MMO 샌드박스 설계
야생의 땅: 듀랑고의 시뮬레이션 MMO 샌드박스 설계
승명 양
 
오픈소스 개발참여한 이야기 (NIPA 오픈프론티어 3기 송태웅)
오픈소스 개발참여한 이야기 (NIPA 오픈프론티어 3기 송태웅)오픈소스 개발참여한 이야기 (NIPA 오픈프론티어 3기 송태웅)
오픈소스 개발참여한 이야기 (NIPA 오픈프론티어 3기 송태웅)
Taeung Song
 
NDC15_백정상_최종_모바일_앱의_실시간_운영을_위한_유저분석과_타게팅_기법
NDC15_백정상_최종_모바일_앱의_실시간_운영을_위한_유저분석과_타게팅_기법NDC15_백정상_최종_모바일_앱의_실시간_운영을_위한_유저분석과_타게팅_기법
NDC15_백정상_최종_모바일_앱의_실시간_운영을_위한_유저분석과_타게팅_기법
Jeongsang Baek
 
JavaScript defer & async
JavaScript defer & asyncJavaScript defer & async
JavaScript defer & async
Seung-Hyun PAEK
 
스마트폰 온라인 게임에서 고려해야 할 것들
스마트폰 온라인 게임에서 고려해야 할 것들스마트폰 온라인 게임에서 고려해야 할 것들
스마트폰 온라인 게임에서 고려해야 할 것들
Hyunjik Bae
 
PC 와 모바일에서의 P2P 게임 구현에서의 차이점 비교
PC 와 모바일에서의 P2P 게임 구현에서의 차이점 비교PC 와 모바일에서의 P2P 게임 구현에서의 차이점 비교
PC 와 모바일에서의 P2P 게임 구현에서의 차이점 비교
iFunFactory Inc.
 
맛만 보자 액터 모델이란
맛만 보자 액터 모델이란 맛만 보자 액터 모델이란
맛만 보자 액터 모델이란
jbugkorea
 
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기
흥배 최
 
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Esun Kim
 
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
Dae Kim
 
[Gaming on AWS] 넥슨 - AWS를 활용한 모바일 게임 서버 개발: 퍼즐 주주의 사례
[Gaming on AWS] 넥슨 - AWS를 활용한 모바일 게임 서버 개발: 퍼즐 주주의 사례[Gaming on AWS] 넥슨 - AWS를 활용한 모바일 게임 서버 개발: 퍼즐 주주의 사례
[Gaming on AWS] 넥슨 - AWS를 활용한 모바일 게임 서버 개발: 퍼즐 주주의 사례
Amazon Web Services Korea
 

Viewers also liked (20)

Testing nodejs apps
Testing nodejs appsTesting nodejs apps
Testing nodejs apps
 
(GameTech2015) Live Operation by Adbrix의 Node.js와 MongoDB를 이용한 멀티테넌트 인프라 구축사례
(GameTech2015) Live Operation by Adbrix의 Node.js와 MongoDB를 이용한 멀티테넌트 인프라 구축사례(GameTech2015) Live Operation by Adbrix의 Node.js와 MongoDB를 이용한 멀티테넌트 인프라 구축사례
(GameTech2015) Live Operation by Adbrix의 Node.js와 MongoDB를 이용한 멀티테넌트 인프라 구축사례
 
Amazon web service를 활용한 모바일 게임 서버 개발 퍼즐 주주의 사례를 중심으로
Amazon web service를 활용한 모바일 게임 서버 개발   퍼즐 주주의 사례를 중심으로Amazon web service를 활용한 모바일 게임 서버 개발   퍼즐 주주의 사례를 중심으로
Amazon web service를 활용한 모바일 게임 서버 개발 퍼즐 주주의 사례를 중심으로
 
Inside node.js
Inside node.jsInside node.js
Inside node.js
 
What’s new in c++11
What’s new in c++11What’s new in c++11
What’s new in c++11
 
[NDC16] (애드브릭스) 라이브마이그레이션 분투기 - 달리는 분석 툴의 바퀴를 갈아 끼워보자!
[NDC16] (애드브릭스) 라이브마이그레이션 분투기 - 달리는 분석 툴의 바퀴를 갈아 끼워보자![NDC16] (애드브릭스) 라이브마이그레이션 분투기 - 달리는 분석 툴의 바퀴를 갈아 끼워보자!
[NDC16] (애드브릭스) 라이브마이그레이션 분투기 - 달리는 분석 툴의 바퀴를 갈아 끼워보자!
 
Project bs oss
Project bs ossProject bs oss
Project bs oss
 
[Hello world 오픈세미나]n grinder helloworld발표자료_저작권free
[Hello world 오픈세미나]n grinder helloworld발표자료_저작권free[Hello world 오픈세미나]n grinder helloworld발표자료_저작권free
[Hello world 오픈세미나]n grinder helloworld발표자료_저작권free
 
[Hello world 오픈세미나]vertx&socket io
[Hello world 오픈세미나]vertx&socket io[Hello world 오픈세미나]vertx&socket io
[Hello world 오픈세미나]vertx&socket io
 
야생의 땅: 듀랑고의 시뮬레이션 MMO 샌드박스 설계
야생의 땅: 듀랑고의 시뮬레이션 MMO 샌드박스 설계야생의 땅: 듀랑고의 시뮬레이션 MMO 샌드박스 설계
야생의 땅: 듀랑고의 시뮬레이션 MMO 샌드박스 설계
 
오픈소스 개발참여한 이야기 (NIPA 오픈프론티어 3기 송태웅)
오픈소스 개발참여한 이야기 (NIPA 오픈프론티어 3기 송태웅)오픈소스 개발참여한 이야기 (NIPA 오픈프론티어 3기 송태웅)
오픈소스 개발참여한 이야기 (NIPA 오픈프론티어 3기 송태웅)
 
NDC15_백정상_최종_모바일_앱의_실시간_운영을_위한_유저분석과_타게팅_기법
NDC15_백정상_최종_모바일_앱의_실시간_운영을_위한_유저분석과_타게팅_기법NDC15_백정상_최종_모바일_앱의_실시간_운영을_위한_유저분석과_타게팅_기법
NDC15_백정상_최종_모바일_앱의_실시간_운영을_위한_유저분석과_타게팅_기법
 
JavaScript defer & async
JavaScript defer & asyncJavaScript defer & async
JavaScript defer & async
 
스마트폰 온라인 게임에서 고려해야 할 것들
스마트폰 온라인 게임에서 고려해야 할 것들스마트폰 온라인 게임에서 고려해야 할 것들
스마트폰 온라인 게임에서 고려해야 할 것들
 
PC 와 모바일에서의 P2P 게임 구현에서의 차이점 비교
PC 와 모바일에서의 P2P 게임 구현에서의 차이점 비교PC 와 모바일에서의 P2P 게임 구현에서의 차이점 비교
PC 와 모바일에서의 P2P 게임 구현에서의 차이점 비교
 
맛만 보자 액터 모델이란
맛만 보자 액터 모델이란 맛만 보자 액터 모델이란
맛만 보자 액터 모델이란
 
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기
 
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
 
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
 
[Gaming on AWS] 넥슨 - AWS를 활용한 모바일 게임 서버 개발: 퍼즐 주주의 사례
[Gaming on AWS] 넥슨 - AWS를 활용한 모바일 게임 서버 개발: 퍼즐 주주의 사례[Gaming on AWS] 넥슨 - AWS를 활용한 모바일 게임 서버 개발: 퍼즐 주주의 사례
[Gaming on AWS] 넥슨 - AWS를 활용한 모바일 게임 서버 개발: 퍼즐 주주의 사례
 

Similar to Rhea mmo node_for_share

Nodejs발표자료 - 팀 세미나용
Nodejs발표자료 - 팀 세미나용 Nodejs발표자료 - 팀 세미나용
Nodejs발표자료 - 팀 세미나용
SuHyun Jeon
 
Html5 게임 기술의 개요
Html5 게임 기술의 개요Html5 게임 기술의 개요
Html5 게임 기술의 개요
Changhwan Yi
 
AWS Community Day 2022 - Nitro Enclave를 이용하여 안전하게 고객 정보 다...
AWS Community Day 2022 - Nitro Enclave를 이용하여 안전하게 고객 정보 다...AWS Community Day 2022 - Nitro Enclave를 이용하여 안전하게 고객 정보 다...
AWS Community Day 2022 - Nitro Enclave를 이용하여 안전하게 고객 정보 다...
JooHyung Kim
 
MEAN Stack 기반 모바일 서비스 개발 overview
MEAN Stack 기반 모바일 서비스 개발 overviewMEAN Stack 기반 모바일 서비스 개발 overview
MEAN Stack 기반 모바일 서비스 개발 overview
민태 김
 
빠르게훓어보는 Node.js와 Vert.x
빠르게훓어보는 Node.js와 Vert.x빠르게훓어보는 Node.js와 Vert.x
빠르게훓어보는 Node.js와 Vert.x
Terry Cho
 
Iocp advanced
Iocp advancedIocp advanced
Iocp advanced
Nam Hyeonuk
 
[TeamStudy-022] Docker
[TeamStudy-022] Docker[TeamStudy-022] Docker
[TeamStudy-022] Docker
Wonjun Hwang
 
초보 개발자/학생들을 위한 오픈소스 트랜드
초보 개발자/학생들을 위한 오픈소스 트랜드 초보 개발자/학생들을 위한 오픈소스 트랜드
초보 개발자/학생들을 위한 오픈소스 트랜드
YoungSu Son
 
Red Hat OpenStack 17 저자직강+스터디그룹_2주차
Red Hat OpenStack 17 저자직강+스터디그룹_2주차Red Hat OpenStack 17 저자직강+스터디그룹_2주차
Red Hat OpenStack 17 저자직강+스터디그룹_2주차
Nalee Jang
 
Quic을 이용한 네트워크 성능 개선
 Quic을 이용한 네트워크 성능 개선 Quic을 이용한 네트워크 성능 개선
Quic을 이용한 네트워크 성능 개선
NAVER D2
 
유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기
유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기
유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기
Kiyoung Moon
 
5G Cloud 기술
5G Cloud 기술5G Cloud 기술
5G Cloud 기술
James Ahn
 
kt-cloud
kt-cloudkt-cloud
NDC15 - 사례로 살펴보는 MSVC 빌드 최적화 팁
NDC15 - 사례로 살펴보는 MSVC 빌드 최적화 팁NDC15 - 사례로 살펴보는 MSVC 빌드 최적화 팁
NDC15 - 사례로 살펴보는 MSVC 빌드 최적화 팁
Yi-kwon Hwang
 
프론트엔드 개발자의 자바스크립트
프론트엔드 개발자의 자바스크립트 프론트엔드 개발자의 자바스크립트
프론트엔드 개발자의 자바스크립트
jeong seok yang
 
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
JinKwon Lee
 
2013년 7월 현재 트렌드에서의 프라우드넷은 어떻게 적응하고 있는가
2013년 7월 현재 트렌드에서의 프라우드넷은 어떻게 적응하고 있는가2013년 7월 현재 트렌드에서의 프라우드넷은 어떻게 적응하고 있는가
2013년 7월 현재 트렌드에서의 프라우드넷은 어떻게 적응하고 있는가Hyun-jik Bae
 
Multithread pattern 소개
Multithread pattern 소개Multithread pattern 소개
Multithread pattern 소개Sunghyouk Bae
 
Block chain bidding_System
Block chain bidding_SystemBlock chain bidding_System
Block chain bidding_System
환석 주
 

Similar to Rhea mmo node_for_share (20)

Nodejs발표자료 - 팀 세미나용
Nodejs발표자료 - 팀 세미나용 Nodejs발표자료 - 팀 세미나용
Nodejs발표자료 - 팀 세미나용
 
Html5 게임 기술의 개요
Html5 게임 기술의 개요Html5 게임 기술의 개요
Html5 게임 기술의 개요
 
AWS Community Day 2022 - Nitro Enclave를 이용하여 안전하게 고객 정보 다...
AWS Community Day 2022 - Nitro Enclave를 이용하여 안전하게 고객 정보 다...AWS Community Day 2022 - Nitro Enclave를 이용하여 안전하게 고객 정보 다...
AWS Community Day 2022 - Nitro Enclave를 이용하여 안전하게 고객 정보 다...
 
MEAN Stack 기반 모바일 서비스 개발 overview
MEAN Stack 기반 모바일 서비스 개발 overviewMEAN Stack 기반 모바일 서비스 개발 overview
MEAN Stack 기반 모바일 서비스 개발 overview
 
빠르게훓어보는 Node.js와 Vert.x
빠르게훓어보는 Node.js와 Vert.x빠르게훓어보는 Node.js와 Vert.x
빠르게훓어보는 Node.js와 Vert.x
 
Iocp advanced
Iocp advancedIocp advanced
Iocp advanced
 
[TeamStudy-022] Docker
[TeamStudy-022] Docker[TeamStudy-022] Docker
[TeamStudy-022] Docker
 
초보 개발자/학생들을 위한 오픈소스 트랜드
초보 개발자/학생들을 위한 오픈소스 트랜드 초보 개발자/학생들을 위한 오픈소스 트랜드
초보 개발자/학생들을 위한 오픈소스 트랜드
 
Red Hat OpenStack 17 저자직강+스터디그룹_2주차
Red Hat OpenStack 17 저자직강+스터디그룹_2주차Red Hat OpenStack 17 저자직강+스터디그룹_2주차
Red Hat OpenStack 17 저자직강+스터디그룹_2주차
 
Quic을 이용한 네트워크 성능 개선
 Quic을 이용한 네트워크 성능 개선 Quic을 이용한 네트워크 성능 개선
Quic을 이용한 네트워크 성능 개선
 
유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기
유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기
유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기
 
5G Cloud 기술
5G Cloud 기술5G Cloud 기술
5G Cloud 기술
 
kt-cloud
kt-cloudkt-cloud
kt-cloud
 
NDC15 - 사례로 살펴보는 MSVC 빌드 최적화 팁
NDC15 - 사례로 살펴보는 MSVC 빌드 최적화 팁NDC15 - 사례로 살펴보는 MSVC 빌드 최적화 팁
NDC15 - 사례로 살펴보는 MSVC 빌드 최적화 팁
 
프론트엔드 개발자의 자바스크립트
프론트엔드 개발자의 자바스크립트 프론트엔드 개발자의 자바스크립트
프론트엔드 개발자의 자바스크립트
 
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
 
2013년 7월 현재 트렌드에서의 프라우드넷은 어떻게 적응하고 있는가
2013년 7월 현재 트렌드에서의 프라우드넷은 어떻게 적응하고 있는가2013년 7월 현재 트렌드에서의 프라우드넷은 어떻게 적응하고 있는가
2013년 7월 현재 트렌드에서의 프라우드넷은 어떻게 적응하고 있는가
 
Multithread pattern 소개
Multithread pattern 소개Multithread pattern 소개
Multithread pattern 소개
 
Node
NodeNode
Node
 
Block chain bidding_System
Block chain bidding_SystemBlock chain bidding_System
Block chain bidding_System
 

Rhea mmo node_for_share

  • 1. 1st node.js Korea conference MMORPG에서의 node.js를 이용한 커뮤니티 설계 11.20.2012 드래곤플라이 rhea@dfgame.co.kr 2012.11.20
  • 2. About Me  Game Developer  98~  2004~10 NeowizGames  2010~11 네시삼십삼분  2012~ Dragonfly  Technical Director  http://www.gamedevforever.com/ Page 2
  • 3. Current Page 3
  • 4. IRC Page 4
  • 5. TCP Page 5
  • 6. Tragedy of WIFI & 3G Page 6
  • 7. REST  이럴봐엔 차라리 Comet을 쓰겠어!  그런데 PC, 스마트폰 같이 되었으면 좋겠네. Page 7
  • 9. WebSocket Page 9
  • 10. Mercury Project  Legacy RPC와 REST API를 한번에 찍어내고 싶다.  node.js로 이렇게 저렇게 하면 될 것 같은데 …?  Mercury Project – Node.js를 이용한 MMO 커뮤니티 프로젝트 – 스마트 디바이스 지원 – 한번에 REST, Socket RPC를 뽑고 싶다. Page 10
  • 11. node.js Common Server Node.js Script Engine JavaScript Based Based Contents Contents Lua, Python V8 Script Engine JavaScript Engine By C++ By C++ C++ or C# C++ IOCP Model IOCP Model Page 11
  • 12. I/O Model  윈도우 서버의 1차 임무  완벽한 비동기 I/O  I/O CompletePort – 게임 서버 개발자 면접 볼 때의 hello world – 가장 쓰레드를 적게 쓰면서 수천개의 소켓 이벤트 획득 – I/O는 비동기. Send/Recv는 일단 리턴한다. Page 12
  • 13. IOCP: node.js Page 13
  • 14. Benchmark  Boost::Asio vs. Node.js 총 데이터(Recv/Send) : 516,000,000/516,000,000 시도 서버 연결 개수 메모리(Max) CPU(Max) 스레드 서버 총 처리 시간 클라 총 Send 시간 클라 총 Recv 시간 Asio 1000 276,544 25 2 0:55 0:39 0:54 1차 Node 1000 665,004 12 3 1:04 1:02 1:07 Asio 1000 276,496 25 2 0:57 0:40 0:55 2차 Node 1000 664,596 12 4 1:05 1:02 1:06 Asio 1000 276,420 25 2 1:05 0:45 1:02 3차 Node 1000 662,024 13 4 1:16 1:14 1:20  메모리를 더 차지하나 속력은 만족 – V8의 메모리 Page 14
  • 15. net module vs. Socket.IO  채팅서버  성능이 아닌 개발의 편의성  클라이언트 vs. 서버  Socket.IO – Websocket – Smart Phone – Rooms Page 15
  • 16. Socket.IO  벤치마킹 – CPU E5-2650 2.00Ghz(2 processors) – 4.00 GB – x64 Windwos Server – 153byte Echo test 접속수 2253 3257 4053 초당 에코성공 1690 2178 2681 초당 에코성공 1741 2174 2612 초당 에코성공 1684 2225 2225 Page 16
  • 17. Pub/Sub  Socket.IO의 친구 Redis  동접의 증가를 고려  Page 17
  • 18. MS Open Tech Page 18
  • 19. IOCP: Redis Page 19
  • 20. Basic Community System CMN1 (node.js/Socket.I O) CBS (Redis) CMN2 (node.js/Socket.IO) Push Gateway(C#) Page 20
  • 21. Native Problem  Win32 Client에서는 어떻게 받지?  WebSocket을 C/C++로 구현  RFC 6455 및 Socket.IO 프로토콜 직접 구현 Page 21
  • 22. Websocket Protocol  Websocket Protcol  애당초 http, ftp, ws라는 것은 없다 • 서버 접속 • Session ID와 Transport ID 받음 • Socket 혹은 XMLHTTPRequest로 받을 것인지 선택 – XMLHTTPRequest라면 클라이언트가 계속 폴링 – Socket이라면 새 Transport 연결 획득 • 지정된 시간만큼 핸드쉐이킹 • Socket.IO 프로토콜 추가 Page 22
  • 23. Websocket Protocol  Socket.IO 클라이언트( js)가 하는 일 Page 23
  • 24. Websocket Protocol GET /mychat HTTP/1.1 Host: server.example.com Upgrade: websocket Connection: Upgrade Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw== Sec-WebSocket-Protocol: chat Sec-WebSocket-Version: 13 Origin: http://example.com Page 24
  • 26. Caloris https://github.com/RheaStrike/Caloris – Socket.IO용 Win32 C++ 클라이언트 라이브러리 Page 26
  • 27. Demo Page 27
  • 28. REST API  node.js?  ASP.NET – 왜죠? Page 28
  • 29. Socket.IO  I/O 문제 해결  모바일 환경에서 Connection 문제 해결  접근은 쉽다  그러나… – 표현이 된다고 끝이 아니다. – 빈약한 자료구조, C++에 비해 부족한 함수 – 싱글 쓰레드 – 아예 C++로 플러그인을 만들어 버릴까 – HeartBeat을 안젂하게 처리할 새로운 프로토콜 개발 Page 29
  • 30. Appropriate Technology • C++은 여전히 최고의 도구 • 기술의 진보 • 개발자와 사용자를 위한 적정기술 • 실험과 대안 Page 30
  • 31. End 감사합니다. Page 31