5. • iPhone 4S의 전체 메모리는 512MB
• 그 중에서 실제 사용가능한 프로세스 메
모리는?
• iOS 7 50~200MB
• iPhone 5S에서 iOS 8 업그레이드 후 잔여 공
간이 700에서 500MB로 하락!
• 메모리 모자라면 PC는? 한편 모바일은?
6. • 60Hz만 충족시킨다고 ok? 배터리는?
• 하이엔드 경험을 위해 60Hz 강행
• 배터리 아끼기 위해 15Hz로 다운
• 멀티스레드 싫어함 & 소켓 버퍼 커야
7. 네트워크의 고약한 점
• 긴 하위호환성의 문제
• 사람 피를 완전히 바꾸는 것만큼 어려움
• 유선 네트워크보다 무선 네트워크가 물리학상으로도 훨씬 더
불안정
12. TCP on packet drop
• 무선 통신의 높은 레이턴시와 패킷 드
랍율
• TCP는 쉽게 retransmission 랙이 발생
함
• 결론: UDP 꼭 쓰세요
20~200ms 20%
20~200ms (80%)
520~720ms (20%)
13. UDP only면 충분?
• 기업 방화벽
• 일부 wifi AP
• 일부 3G/LTE 기지국
• 결론: TCP를 꼭 혼용하세요 (프라우드넷은 옛날부터 이미 ㅋ)
14. UDP vs. traffic conservation
• 무선 통신량 패킷 드랍율
• 전파 혼잡 패킷 드랍율
• 결국 한번 보낼 때 적게 패킷 보내야
• 결론: UDP 패킷을 필요한 것들은 합쳐
보내세요
• 그렇다고 너무 합치면 합침 대기 간격
(coalesce interval) 자체가 랙이 됨
• RTO에 비례해서 잡아야 (아니면 프라우드넷을… ㅋㅋ)
15. 모바일에서 P2P
• 프라우드넷은 선 홀펀칭 후 릴레이 방식 게임 개발자는 그냥
항상 홀펀칭 된다는 가정하에 코딩
• 홀펀칭 대기 시간이 없어 개발은 편하지만,
안타깝게도 양쪽 다 LTE인 경우 홀펀칭 안됨
• 하나 이상이 wifi이면 85(국외)~95%(국내)지만
16. • 3G/LTE vs. Wifi
• 게임 하다가 wifi존에서 나간 경우
• 게임 하다가 wifi존에 도착한 경우
• 게임 플레이하다 전화가 온 경우
17. MPTCP가 뜰까?
• 연결 유지 기능을 TCP stack에!
• 거의 모든 라우터에서 TCP 타입 IP 패킷을 투과시킨다는 점을 착안
• TCP option field hacking! 페이로드 손 안댐! 님좀짱!
• Proof of Concept (POC)
Wifi
MPTCP-aware Server
3G
18. • MPTCP in iOS7
• Siri (검증중?)
• 후퇴 가능한 프로토콜
• 올리버 논문의 변경 없이 안착한다면?
• 그렇지 않다면?
19. • SCTP, DCCP 혹은 기타는 안나오나?
• 나온지 10년이 넘었는데도 안착 못하는 이유
20. • 프라우드넷에서는?
• P2P, C/S 모두 연결유지 기능 프로토타입 구현된 상태
• 리눅스 포팅 끝나면 마무리 예정 (현재 일부 업체 임상실험(…)중)
• 기존 사용중 업체들에게는 무료로 업데이트될거임
22. 현재 지원중
언어 네트워크 클라이언트 생성
C++ CNetClient* a=Proud::CNetClient::Create();
C# NetClient a=new Nettention.Proud.NetClient();
UnrealScript a = class'NetClient'.static.Create();
Java NetClient a=new com.nettention.proud.NetClient();
플랫폼 네트워크 클라이언트 라이브러리
Windows ProudNetClient.lib
iOS libProudNetClient.a
Android, NDK ProudNetClient.jar libProudNetClient.a
Unreal Engine 3 UnrealEngine3/Development/src/ProudNet/*.*
Unity Engine ProudNetClient.dll (Android, iOS도 동일)
24. • 짜증나더라도, epoll, kqueue, simple poll은
• reactor 모듈로, iocp는 proactor 모듈로 이원화 후
• 제각각 케이스를 만들어야 성능에 유리
• syscall과 1:1 대응하기 때문. 모바일에서 성능에 중요한 요소임
언어 비동기 I/O API 이벤트 대기 함수
Windows IOCP GetQueuedCompletionStatus
Android epoll epoll_wait
iOS kqueue kevent
Marmalade simple poll select
25. • Win32 API 쓰던 부분들 다 뜯어냄
• #if 떡칠
최대한 모아놓고 거기서만 #if 떡칠
• 제일 까다로왔던 부분은 의외로… string 부분임 -0-;
VC++, Marmalade Android, iOS
char Multibyte
(3개 국어 소화 불가능)
UTF-8
wchar_t UTF-16 UTF-32
(메모리 너무 차지)
26. • Mono ≠ .Net Framework
• iPhone3GS, iPhone 4에서 일으키는 문제
• Mono Socket.Connect 함수의 버그
36. • 몇 단점에도 불구하고 장점이 매우 큼
• 낮은 반응 속도 < 높은 안정성
• 비동기 멀티플레이 게임에서는 만족
37. decision making tree
비동기
멀티플레이
동기
멀티플레이
TCP, UDP
클라에서
플레이 판정
(빠른 반응성, 서버
유지비 절감)
서버에서
플레이 판정
(해킹 방어,
잠수함 패치 용이)
HTTP
38. 웹서버+프라우드넷
• 이렇게 개발하는 경우
• 처음에 웹서버로 개발하다가 중
도에 필요해지는 경우
• 멀티플레이, 서버사이드 게임판정
• 어떻게 같이 사용하는지
• DB를 매개채로 데이터 공유
• 플러그인을 통해 서버간 통신
39. 논리적 단일 서버
• 우리의 DB cache 시스템으로 논리적
단일 서버를 이렇게 구축
게임
DB
유저계
정 DB
매핑DB
DB cache
server
게임
DB
유저계
정 DB
DB cache
server
게임
DB
유저계
정 DB
DB cache
server
게임
DB
유저계
정 DB
DB cache
server
게임서버
게임서버
게임서버
매핑DB 매핑DB
클라
44. 클라우드에서 프라우드넷의 성능
• 모바일 게임 Fish Riots 라이
브 서버
• A???? US West
• 7GB RAM, 4 CPU
• Windows Server 2012
• 화면에 최대 50개의 타 플레이
어가 보여짐 (일반적인
MMORPG보다 2배정도 부하
를 줌)
• 스트레스 테스트 클라이언트
를 사용
• No P2P
45. • 동시접속자 1112명에서
CPU 8~12% 사용
• System process는 약 6%
를 사용 (서버 반 클라 반)
• 일반적인 서버의 한계 수
위가 CPU 80%인 점을 감
안하면, 최대 동시접속자
7000명 처리 가능
46. 리얼 머신에서 처리 성능
CPU Intel® Core™ i7-2600 CPU @ 3.40GHz
(4코어&하이퍼스레딩)
메모리 16.0GB
운영체제 Window 8.1 Pro K
시스템 종류 64비트 운영체제, x64 기반 프로세서
1000개 +
더미 클라이언트
즉, 80% 기준으로 동시
접속자
20000명 처리