2018 아이펀팩토리 데브데이 서버위더스
(iFunFactory DevDay Server,Withus)
제목 : HTML5 / WebSocket으로 Pong 게임 만들기
발표자 : 민영기 테크니컬 디렉터
일정 : 2018년 03월 28일
개요 : HTML5 / Websocket을 이용하여 브라우저 상에서 동작하는 실시간 대전 게임 'Pong'을 구현해 보며 마주치는 문제점들과 해결책을 알아봅니다
아래링크를 통해 아이펀팩토리의 더 많은 정보를 얻으실 수 있습니다.
*아이펀팩토리 홈페이지 : https://ifunfactory.com/
*아이펀팩토리 기술 블로그 : https://blog.ifunfactory.com/
5. 2018 iFunFactory Dev Day
옛날 옛적 웹 게임은…
서버 사이드 구현
• 서버 기반 렌더링
• 정적인 컨텐츠 위주
• 제한적인 상호작용
플러그인
OR
6. 2018 iFunFactory Dev Day
출처: http://news.inews24.com/php/news_view.php?g_serial=1083844&g_menu=020500
출처: https://www.hungryapp.co.kr/news/news_view.php?bcode=news&catecode=010&pid=60179
15. 2018iFunFactoryDevDay
2018 iFunFactory Dev Day
•블록의 위치
• 일정 주기마다 자신의 블록 위치 전송
•공의 위치
• 기본적으로 동기화하지 않음
• 방향 변경 이벤트만 동기화, 그 외는 물리엔진 이용
•블록과 공의 충돌
• 자신의 충돌 시 정보를 상대에 알림
동기화
18. 2018iFunFactoryDevDay
2018 iFunFactory Dev Day
•모든 통신은 간접적 형태로 이루어짐
• href(링크), XmlHttpRequest(Ajax), …
• TCP 및 이하 레이어로 접근 불가
•타 브라우저로의 접근은 허용하지 않음
•Client-Server 모델 사용
• 선택지가 없음
브라우저상의 통신
21. 2018iFunFactoryDevDay
2018 iFunFactory Dev Day
•HTTP
• HTTP functions as a request–response protocol in the client–server
computing model
• server는 브라우저로부터의 요청 `응답` 만 가능
•스펙 상 Server push 가 불가능
웹에서의 Server Side Push
23. 2018iFunFactoryDevDay
2018 iFunFactory Dev Day
•서버가 원할 때 메세지를 보낼 수 없음
• 브라우저가 요청하지 않은 리소스 전송(O)
• 브라우저 요청 없이 메세지 전송(X)
•브라우저로부터 요청을 받았을 때
요청받지 않은 것도 보낼 수 있는 기능
HTTP/2 PUSH
26. 2018iFunFactoryDevDay
2018 iFunFactory Dev Day
•통신 빈도 증가
• 브라우저는 서버로 보낼 것이 없더라도
푸시를 받기 위해 항상 요청을 보내야 함
•통신 딜레이 증가
• 보낼 것이 있어도 브라우저로부터의 요청을 기다려야 함
•양방향 통신 불가
• 서버/브라우저가 보내는 채널을 별도로 유지해야 함
Long Polling
29. 2018iFunFactoryDevDay
2018 iFunFactory Dev Day
WebSocket Handshake
1. HTTP->WebSocket
업그레이드 요청
2. WebSocket 사용
/사용 불가 알림
브라우저 서버
3. Websocket 통신
HTTP
통신
Websocket
프로토콜
통신
30. 2018iFunFactoryDevDay
2018 iFunFactory Dev Day
•TCP / Datagram 기반 프로토콜
•Text/Binary 모두 전송 가능
•각 메세지는프레임으로 나뉘어 전달
•각 프레임마다 헤더가 추가됨
• opcode, length, …
• 이론상 프레임의 최대 길이는 2^63 Byte
WebSocket Protocol
31. 2018iFunFactoryDevDay
2018 iFunFactory Dev Day
• 프레임 헤더 크기 외의 overhead 는 없음
• 전송할 데이터의 크기에 따라 헤더 크기가 달라짐
• 크게 신경쓰지 않아도 될 수준
Websocket Overhead
데이터 크기 헤더 크기
(Byte)(C->S)
헤더 크기
(Byte)(S->C)
<126 Byte 6 2
<64 KByte 8 4
<2^63 Byte 12 8
35. 2018iFunFactoryDevDay
2018 iFunFactory Dev Day
•웹상에서 실시간 통신을 지원하는 프레임워크
•다양한 언어로 구현체 존재
• Javascript, Java, C++ 등
•다양한 통신 수단 이용
• Weboscket, long-polling, iframe, …
Socket.IO
44. 2018iFunFactoryDevDay
2018 iFunFactory Dev Day
•대부분의 웹서버 기술에서 Websocket 지원
• 웹 이외의 기술에서도 지원하는 경우 많음
•지원하는 웹 서버
•Apache, IIS, Nginx….
•지원하는 서버 프레임워크
• Spring, PHP, flask 등의 웹 프레임워크
• IFunEngine, supersocket 등의 서버 기술 프레임워크
Pong 서버용 기술
49. 2018iFunFactoryDevDay
2018 iFunFactory Dev Day
•<canvas>
• 직접 ‘그릴’ 수 있는 영역
•<audio>
• mp3/ogg 등의 사운드 플레이 지원
•local storage
• key/value 쌍을 클라이언트쪽에 저장하는 기능
•WebWorker
• Background 작업 수행 가능
HTML5
53. 2018iFunFactoryDevDay
2018 iFunFactory Dev Day
•Unity Webgl
• 모바일 지원 미비
• https://docs.unity3d.com/Manual/webgl-browsercompatibility.html
•Unreal html5
• 아직 실험중(experimental)인 기능
• https://docs.unrealengine.com/en-us/Platforms/HTML5/GettingStarted
HTML5 Game Engine
55. 2018iFunFactoryDevDay
2018 iFunFactory Dev Day
•네트워크 기능은 거의 제공하지 않음
•통합 개발 환경 제공하는 엔진도 존재
• 백로 엔진
• https://egret.com/en/
• construct
• https://www.construct.net/kr
HTML5 Game Engine
62. Q&A
2018 iFunFactory Dev Day
2018 iFunFactory Dev Day
Thank You!
경기도 성남시 분당구 대왕판교로 660, 유스페이스1 B동 606호 아이펀팩토리
info@ifunfactory.com +82-70-4923-6566 www.ifunfactory.com