NDC Python 게임서버 안녕하십니까? : 몬스터 슈퍼리그 게임 서버 편의 후속으로 기획된 발표입니다. 사내 준비 도중 "너굴" 님의 질문에서 시작되었습니다.
이 발표는 잘 알려진 RPC Framework 인 Thrift, gRPC를 살펴보고 예시로 오델로 게임을 만들어보면서 기존 RPC framework 들이 게임의 서버/클라 구조에 잘 어울리지는 살펴보고 왜 몬스터 슈퍼리그에서 그런 선택을 했는지 살펴봅니다.
그리고 게임에 맞게 RPC 를 설계하고 이를 이용하여 온라인 오델로 게임을 완성해봅니다.
NHN NEXT 게임 서버 프로그래밍 강의 자료입니다. 최소한의 필요한 이론 내용은 질문 위주로 구성되어 있고 (답은 학생들 개별로 고민해와서 피드백 받는 방식) 해당 내용에 맞는 실습(구현) 과제가 포함되어 있습니다.
참고로, 서버 아키텍처에 관한 과목은 따로 있어서 본 강의에는 포함되어 있지 않습니다.
[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기강 민우
펄어비스의 MMORPG, 검은사막에 적용되어있는 AI 네비게이션 기능은 VOXEL 기반으로 자체 개발한 엔진을 이용해 구현되어 있습니다. 기존의 대다수 상용 라이브러리들이 네비 메쉬라고 하는 이동가능한 평면을 표현하는 폴리곤 기반의 데이터를 이용해 길찾기를 수행해주는 것에 비해 근간이 다릅니다. 이 강연에서는 검은사막의 네비게이션 엔진을 구현하고, 서버 / 클라이언트에 적용하면서 얻게된 노하우와 적용된 결과물들을 소개합니다.
NDC Python 게임서버 안녕하십니까? : 몬스터 슈퍼리그 게임 서버 편의 후속으로 기획된 발표입니다. 사내 준비 도중 "너굴" 님의 질문에서 시작되었습니다.
이 발표는 잘 알려진 RPC Framework 인 Thrift, gRPC를 살펴보고 예시로 오델로 게임을 만들어보면서 기존 RPC framework 들이 게임의 서버/클라 구조에 잘 어울리지는 살펴보고 왜 몬스터 슈퍼리그에서 그런 선택을 했는지 살펴봅니다.
그리고 게임에 맞게 RPC 를 설계하고 이를 이용하여 온라인 오델로 게임을 완성해봅니다.
NHN NEXT 게임 서버 프로그래밍 강의 자료입니다. 최소한의 필요한 이론 내용은 질문 위주로 구성되어 있고 (답은 학생들 개별로 고민해와서 피드백 받는 방식) 해당 내용에 맞는 실습(구현) 과제가 포함되어 있습니다.
참고로, 서버 아키텍처에 관한 과목은 따로 있어서 본 강의에는 포함되어 있지 않습니다.
[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기강 민우
펄어비스의 MMORPG, 검은사막에 적용되어있는 AI 네비게이션 기능은 VOXEL 기반으로 자체 개발한 엔진을 이용해 구현되어 있습니다. 기존의 대다수 상용 라이브러리들이 네비 메쉬라고 하는 이동가능한 평면을 표현하는 폴리곤 기반의 데이터를 이용해 길찾기를 수행해주는 것에 비해 근간이 다릅니다. 이 강연에서는 검은사막의 네비게이션 엔진을 구현하고, 서버 / 클라이언트에 적용하면서 얻게된 노하우와 적용된 결과물들을 소개합니다.
3. Coroutine
같은 스레드에서 제어권이 변경 되는 것이기 때문에 동기화 문제가 발생하지
않는다
쓰레드 보다 적은 비용이 든다
코루틴 객체는 힙에 생성이 된다
코루틴 객체의 수명에 유의 해야 한다
구현이 어렵다(C++, 개인적인 생각…)
4. 코루틴을 적용할 수 없는 함수들
가변 인자
일반 return 문을 사용
constexpr, consteval
생성자, 소멸자
main
5. 추가된 키워드
co_await 표현식 : 재개 될 때까지 일시 중지
std::size_t n = co_await socket.async_read_some(buffer(data));
co_yield 표현식 : 값을 반환하고 일시 중지
while (true) co_yield n++;
co_return 문 : 값을 반환하고 끝낸다
co_return 7;
6. 구현시 필요한 것들
promise
"코루틴 내부"에서 관리 되는 객체. 코루틴의 결과나 예외를 이 객체를 통해
호출자에게 전달 하는 용도로 사용
코루틴 핸들
"코루틴 외부"에서 관리 되는 객체. 코루틴을 resume하거나 코루틴 프레임을
제거 할 때 사용
코루틴 프레임
"힙 메모리 영역"에 할당 되는 코루틴 상태를 나타내는 객체
8. 코루틴 핸들
promise_type이라는 내부 형식을 정의하고 있어야한다
직접 정의하거나 std::coroutine_traits를 Generator로 특수화한
std::coroutine_traits<Generator>를 public 형식 멤버 promise_type으로 두어도
된다.
9. 코루틴 프레임
약속 객체, 코루인 인수들의 복사본, 정지 시점을 나타내는 객체, 내부의 지역 변수
등으로 구성됨
대기 가능 객체
코루틴이 일시정지 중인지 아닌지 판정
대기자 객체
대기 가능 객체가 종료 혹은 일시 정지 되길 기다리는 객체
co_await 연산자를 정의하거나 대기 가능 객체를 대기자 객체로 변환해야 한다
10. 대기 가능 객체
Awaitable 콘셉트를 충족해야 함
정의 되어있는 std:: suspend_always 와 std::suspend_never 타입을 사용해도 된다