1st node.js Korea conferenceMMORPG에서의 node.js를 이용한            커뮤니티 설계                        11.20.2012                   ...
About Me Game Developer   98~   2004~10 NeowizGames   2010~11 네시삼십삼분   2012~ Dragonfly   Technical Director http://...
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 커...
node.js     Common Server         Node.js      Script Engine                       JavaScript Based          Based        ...
I/O Model 윈도우 서버의 1차 임무 완벽한 비동기 I/O I/O CompletePort  – 게임 서버 개발자 면접 볼 때의 hello world  – 가장 쓰레드를 적게 쓰면서 수천개의 소켓 이벤트 획득 ...
IOCP: node.js                Page 13
Benchmark Boost::Asio vs. Node.js총 데이터(Recv/Send) : 516,000,000/516,000,000 시도     서버     연결 개수       메모리(Max)        CPU...
net module vs. Socket.IO 채팅서버 성능이 아닌 개발의 편의성 클라이언트 vs. 서버 Socket.IO  – Websocket  – Smart Phone  – Rooms              ...
Socket.IO 벤치마킹  –   CPU E5-2650 2.00Ghz(2 processors)  –    4.00 GB  –    x64 Windwos Server  –    153byte Echo test   접속...
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     ...
Native Problem Win32 Client에서는 어떻게 받지? WebSocket을 C/C++로 구현 RFC 6455 및 Socket.IO 프로토콜 직접 구현                            ...
Websocket Protocol Websocket Protcol 애당초 http, ftp, ws라는 것은 없다    • 서버 접속    • Session ID와 Transport ID 받음    • Socket 혹...
Websocket Protocol Socket.IO 클라이언트( js)가 하는 일                               Page 23
Websocket ProtocolGET /mychat HTTP/1.1Host: server.example.comUpgrade: websocketConnection: UpgradeSec-WebSocket-Key:x3JJH...
Websocket Protocol                     Page 25
Calorishttps://github.com/RheaStrike/Caloris   – Socket.IO용 Win32 C++ 클라이언트 라이브러리                                        ...
Demo       Page 27
REST API node.js? ASP.NET  – 왜죠?             Page 28
Socket.IO I/O 문제 해결 모바일 환경에서 Connection 문제 해결 접근은 쉽다 그러나…  –   표현이 된다고 끝이 아니다.  –   빈약한 자료구조, C++에 비해 부족한 함수  –   싱글 쓰...
Appropriate Technology      •   C++은 여전히 최고의 도구      •   기술의 진보      •   개발자와 사용자를 위한 적정기술      •   실험과 대안                ...
End      감사합니다.                Page 31
Upcoming SlideShare
Loading in...5
×

Rhea mmo node_for_share

6,246

Published on

node.js conference in Korea, 2012

Published in: Technology

Rhea mmo node_for_share

  1. 1. 1st node.js Korea conferenceMMORPG에서의 node.js를 이용한 커뮤니티 설계 11.20.2012 드래곤플라이 rhea@dfgame.co.kr 2012.11.20
  2. 2. About Me Game Developer 98~ 2004~10 NeowizGames 2010~11 네시삼십삼분 2012~ Dragonfly Technical Director http://www.gamedevforever.com/ Page 2
  3. 3. Current Page 3
  4. 4. IRC Page 4
  5. 5. TCP Page 5
  6. 6. Tragedy of WIFI & 3G Page 6
  7. 7. REST 이럴봐엔 차라리 Comet을 쓰겠어! 그런데 PC, 스마트폰 같이 되었으면 좋겠네. Page 7
  8. 8. WebScoket 아!! Page 8
  9. 9. WebSocket Page 9
  10. 10. Mercury Project Legacy RPC와 REST API를 한번에 찍어내고 싶다. node.js로 이렇게 저렇게 하면 될 것 같은데 …? Mercury Project – Node.js를 이용한 MMO 커뮤니티 프로젝트 – 스마트 디바이스 지원 – 한번에 REST, Socket RPC를 뽑고 싶다. Page 10
  11. 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. 12. I/O Model 윈도우 서버의 1차 임무 완벽한 비동기 I/O I/O CompletePort – 게임 서버 개발자 면접 볼 때의 hello world – 가장 쓰레드를 적게 쓰면서 수천개의 소켓 이벤트 획득 – I/O는 비동기. Send/Recv는 일단 리턴한다. Page 12
  13. 13. IOCP: node.js Page 13
  14. 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. 15. net module vs. Socket.IO 채팅서버 성능이 아닌 개발의 편의성 클라이언트 vs. 서버 Socket.IO – Websocket – Smart Phone – Rooms Page 15
  16. 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. 17. Pub/Sub Socket.IO의 친구 Redis 동접의 증가를 고려 Page 17
  18. 18. MS Open Tech Page 18
  19. 19. IOCP: Redis Page 19
  20. 20. Basic Community System CMN1 (node.js/Socket.I O) CBS (Redis) CMN2 (node.js/Socket.IO) Push Gateway(C#) Page 20
  21. 21. Native Problem Win32 Client에서는 어떻게 받지? WebSocket을 C/C++로 구현 RFC 6455 및 Socket.IO 프로토콜 직접 구현 Page 21
  22. 22. Websocket Protocol Websocket Protcol 애당초 http, ftp, ws라는 것은 없다 • 서버 접속 • Session ID와 Transport ID 받음 • Socket 혹은 XMLHTTPRequest로 받을 것인지 선택 – XMLHTTPRequest라면 클라이언트가 계속 폴링 – Socket이라면 새 Transport 연결 획득 • 지정된 시간만큼 핸드쉐이킹 • Socket.IO 프로토콜 추가 Page 22
  23. 23. Websocket Protocol Socket.IO 클라이언트( js)가 하는 일 Page 23
  24. 24. Websocket ProtocolGET /mychat HTTP/1.1Host: server.example.comUpgrade: websocketConnection: UpgradeSec-WebSocket-Key:x3JJHMbDL1EzLkh9GBhXDw==Sec-WebSocket-Protocol: chatSec-WebSocket-Version: 13Origin: http://example.com Page 24
  25. 25. Websocket Protocol Page 25
  26. 26. Calorishttps://github.com/RheaStrike/Caloris – Socket.IO용 Win32 C++ 클라이언트 라이브러리 Page 26
  27. 27. Demo Page 27
  28. 28. REST API node.js? ASP.NET – 왜죠? Page 28
  29. 29. Socket.IO I/O 문제 해결 모바일 환경에서 Connection 문제 해결 접근은 쉽다 그러나… – 표현이 된다고 끝이 아니다. – 빈약한 자료구조, C++에 비해 부족한 함수 – 싱글 쓰레드 – 아예 C++로 플러그인을 만들어 버릴까 – HeartBeat을 안젂하게 처리할 새로운 프로토콜 개발 Page 29
  30. 30. Appropriate Technology • C++은 여전히 최고의 도구 • 기술의 진보 • 개발자와 사용자를 위한 적정기술 • 실험과 대안 Page 30
  31. 31. End 감사합니다. Page 31
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×