게임서버프로그래밍 #7 - 패킷핸들링 및 암호화Seungmo KooNHN NEXT 게임 서버 프로그래밍 강의 자료입니다. 최소한의 필요한 이론 내용은 질문 위주로 구성되어 있고 (답은 학생들 개별로 고민해와서 피드백 받는 방식) 해당 내용에 맞는 실습(구현) 과제가 포함되어 있습니다.
참고로, 서버 아키텍처에 관한 과목은 따로 있어서 본 강의에는 포함되어 있지 않습니다.
Multi thread game serverOnGameServerThis document discusses strategies for building a multi-threaded game server architecture. It shows how using multiple threads to handle different game logic tasks in parallel can improve performance over a single-threaded approach. Some key challenges discussed include avoiding race conditions through synchronization, preventing deadlocks, and maintaining thread-safety when accessing shared resources. The document provides examples of common threading patterns that can be applied like worker threads, producer-consumer queues, and separating game logic by zone, room, and player entities.
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버Heungsub LeeNDC14에서 발표한 "[야생의 땅: 듀랑고] 서버 아키텍처" 세션의 슬라이드입니다.
슬라이드에 설명이 많지 않은데, 디스이즈게임에서 발표 내용을 잘 정리해주었습니다. 기사도 함께 보시면 좋을 것 같습니다.
http://www.thisisgame.com/webzine/news/nboard/4/?n=54955
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기현철 조[NDC17]
Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
https://github.com/ncsoft/Unreal.js
https://github.com/ncsoft/React-UMG
Demo Link -
https://youtu.be/3F0TGGqedkQ
https://youtu.be/kawyH68OB_g
https://youtu.be/EG99YW6P3rg
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기Jaeseung HaNDC 2017 발표 슬라이드
시연 영상 링크: https://youtu.be/e9Tv3jkmqKk
게임 내 정보를 추가 구현이나 패치 없이 실시간으로 수집할 수 있다면 어떨까요? 이런 아이디어를 실제로 가능하게 구현한 NEXON ZERO 발표 슬라이드 입니다.
Multi thread game serverOnGameServerThis document discusses strategies for building a multi-threaded game server architecture. It shows how using multiple threads to handle different game logic tasks in parallel can improve performance over a single-threaded approach. Some key challenges discussed include avoiding race conditions through synchronization, preventing deadlocks, and maintaining thread-safety when accessing shared resources. The document provides examples of common threading patterns that can be applied like worker threads, producer-consumer queues, and separating game logic by zone, room, and player entities.
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버Heungsub LeeNDC14에서 발표한 "[야생의 땅: 듀랑고] 서버 아키텍처" 세션의 슬라이드입니다.
슬라이드에 설명이 많지 않은데, 디스이즈게임에서 발표 내용을 잘 정리해주었습니다. 기사도 함께 보시면 좋을 것 같습니다.
http://www.thisisgame.com/webzine/news/nboard/4/?n=54955
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기현철 조[NDC17]
Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
https://github.com/ncsoft/Unreal.js
https://github.com/ncsoft/React-UMG
Demo Link -
https://youtu.be/3F0TGGqedkQ
https://youtu.be/kawyH68OB_g
https://youtu.be/EG99YW6P3rg
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기Jaeseung HaNDC 2017 발표 슬라이드
시연 영상 링크: https://youtu.be/e9Tv3jkmqKk
게임 내 정보를 추가 구현이나 패치 없이 실시간으로 수집할 수 있다면 어떨까요? 이런 아이디어를 실제로 가능하게 구현한 NEXON ZERO 발표 슬라이드 입니다.
Deview 2019 눈발자국hanbeom ParkLet's make APM by instrumenting Nodejs through the knowledge gained through tracing. Creating clues that facilitate tracking becomes a milestone for latecomers, like a snow-footprint.
[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기Chris Ohk기존에 작성해 놓은 C++ 코드에 모던 C++를 적용하기는 쉽지 않습니다. 막상 개선하려고 마음먹었다고 해도, 어디서부터 바꿔야 할 지 막막하기만 합니다. 이 세션에서는 기존 C++ 코드에서 모던 C++를 적용해 프로그램의 구조와 성능을 개선하는 방법에 대해서 설명합니다. 그리고 기존 C++ 코드에 모던 C++를 적용할 때 주의해야 될 점에 대해서도 살펴봅니다.
파이썬 데이터과학 레벨1 - 초보자를 위한 데이터분석, 데이터시각화 (2020년 이태영) Tae Young Lee파이썬 데이터과학 레벨1 - 초보자를 위한 데이터분석, 데이터시각화 (2020년 이태영)
- 파이썬 중고급 문법부터 실전 예제까지
- 국내 어떤 책에서도 다루지 않는 진짜 데이터분석 강의
- (귀차니즘에..) 소수 금융권/대기업/공기업에게만 강의된 자료
20150212 c++11 features used in crowJaeseung Hahttp://github.com/ipkn/crow
Crow 프로젝트에서 사용한 C++11 기법들을 실제 구현에 대한 설명을 포함하여 자세히 설명한 발표자료입니다.
C++11 features used in Crow
video:
http://youtu.be/MixS9c3mE6U
https://vimeo.com/119627253
C++17 Key Features Summary - Ver 2Chris OhkC++은 10년 만에 C++11/14를 발표하면서 '모던 C++'이라는 이름으로 발전했습니다. 그만큼 새로운 기능들이 많이 추가되었습니다. 그리고 2017년, C++은 C++17이라는 이름으로 또 한 번의 발전을 준비하고 있습니다. 3년 주기로 빠르게 변화하는 모던 C++에 대비하기 위해, C++17에 추가될 주요 기능들을 살펴보고자 합니다.
이 발표는 이전에 발표했던 내용에서 일부 사례 추가 및 최신 내용으로 갱신한 버전입니다.
13. 핫스팟 찾기
A hot spot in computer science is most usually defined as a region of a computer program
where a high proportion of executed instructions occur or
where most time is spent during the program's execution
(not necessarily the same thing since some instructions are faster than others)
- Wikipedia -
14. 가장 문제가 되는 부분을 고치는 것이
일 한 티가 남 효율이 좋음
A:90 B:10
30 10
90 1
3x
10x
Amdahl's law
2x
15. 프로파일링!
In software engineering, profiling ("program profiling", "software profiling") is a form of
dynamic program analysis that measures, for example, the space (memory) or time complexity of a program,
the usage of particular instructions, or frequency and duration of function calls.
The most common use of profiling information is to aid program optimization.
- Wikipedia -
18. typedef vector<pair<int, string>> Scores;
void GetRanker(const Scores& l, Scores& r) {
// sort(list)[:3]
ScoreList m = l;
sort(m.begin(), m.end(), Scores_less);
r.assign(m.begin(), m.begin() + 3);
}
코드 최적화
디자인 최적화
19. 코드 최적화
void GetRanker(const Scores& l, Scores& r) {
vector<const Scores::value_type*> m(l.size());
for (size_t i=0, j=l.size(); i != j; ++i)
m[i] = &(l[i]);
sort(m.begin(), m.end(), pScoreList_less);
for (size_t i=0; i < 3; i++)
r.push_back(*m[i]);
}
4x
20. 디자인 최적화
void GetRanker(const Scores& l, Scores& r) {
// 리스트를 순회하며 가장 높은 점수 3개 찾기
for (auto i=l.begin(), j=l.end(); i != j; ++i) {
if (r.empty() || r.back().first < i->first) {
auto j = upper_bound(r.begin(), r.end(), *i);
r.insert(j, *i);
if (r.size() > 3)
r.pop_back();
}
}
}
+100x
21. 디자인
어셈블리
컴파일
코드
문제
탑랭커 3명 추려보이기
리스트를 정렬해 상위 3명 얻기
sort(list)[:3]
/Ox
예제
SIMD? PREFETCH?
임의로 뽑은 100명중 상위 3명
순회만으로 상위 3명 얻기
sort(&list)[:3]
/Ox /NO_DEBUG
최적화
x4
x100
x1000
x3
x2
23. CPU 프로파일러레벨
CodeAnalyst
VTune
Visual Studio Profiler
Very Sleepy
Glow Code
In-house Profiler
Brain
GPU 프로파일러
Perfhud
Perfstudio
GPA
PIX
X Engine Profiler
Eye
In-house Profiler
디자인
어셈블리
컴파일
코드
문제
40. item_map[0] = Item();
// item_map[0] – Item::Item() called
// Item() – Item::Item() called
// a = b – operator =
// ~Item() - Item()::~Item() called
Big Constructor & Map
49. ParseString(String) → Key, Value
ParseString(“Key1>테스트”) → “Key1”, “테스트”
ParseString
// 주석
Key1>테스트
Key2>개행도n됩니다n하하하
50. ParseString
길이 제한 검사 (strlen)
문자열 마지막의 ‘n’ ‘r’ 제거
문자열 앞 공백문자 건너뛰기
주석인지 검사
‘>’ 위치 찾기
키 길이 확인
‘>’ 앞뒤의 문자열 얻기 (string assign)
“n” 를 찾고 개행 문자로 치환
Key1>테스트문자열입니다
scan
scan
scan
alloc
59. ParseString 의 예
// 기존 함수와 새 함수가 동일한
// 결과를 반환하는지 확인
ParseString(line, key, val);
ParseStringNew(line, key2, val2);
ASSERT(key == key2 && val == val2);
67. 시작 시간 단축과 달리
매번 동일한 상황을 만들기 번거로우니 않으니.
F5 -> 게임 입장까지 절차 자동화
준비 (실행)
68. 프로파일러가 콜스택을 잘 보이도록
준비 (빌드 옵션)
• CL Global Optimization 끔
(켜 있으면 /Oy- 와 관계없이 FBO 가 되는 현상이 있음)
• CL Frame Buffer Omission 끔
(프로파일러가 콜 스택을 잘 보도록)
• LINK COMDAT Folding 끔
(Identical Function 이 합쳐지는 것 방지)
94. Allocator Guard
bool memcheck(byte* p, int len) {
dword* d = (dword*)p
dword* e = p + len / 4;
for (; d < e; ++d) {
if (*d != 0xabababab)
return false;
return true;
}
95. 몬스터간 충돌에 Kynapse 를 사용
Kynapse Collision
왜 원이 아니고 사각형인가?Collision_RectangularBody