[RTMP] RTMP Relay Server 개발 계획

1 minute read

주차 날짜 계획
3 9/21~ 프로젝트 개요
4 9/28~ select를 사용한 커스텀 프로토콜 서버 개발 외 네트워크 이론 공부
5 10/5~ epoll을 사용한 멀티쓰레드 채팅 서버 개발
6 10/12~ thread-pool을 적용한 채팅 서버 개선
7 10/19~ RTMP relay서버를 위한 thread 구조 설계
8 10/26~ publisher와 media server의 역할을 수행하는 ffmpeg, VLC player 설정
9 11/2~ restful api를 위한 구조 설계
10 11/9~ RTMP packet accept
11 11/16~ RTMP packet relay
12 11/23~ restful RTMP api 구현
13 11/30~ 성능 측정

naming convetion

https://google.github.io/styleguide/cppguide.html#Variable_Names

cpp syntax

https://modoocode.com/138

RAII

unique_ptr

그 함수의 스택에 정의되어 있는 모든 객체들은 빠짐없이 소멸자가 호출된다고 하였습니다 (이를 stack unwinding 이라 한다고 했었죠). 물론 예외가 발생하지 않는다면, 함수가 종료될 때 당연히 소멸자들이 호출되지요.

그렇다면 생각을 조금 바꿔서 만약에 이 소멸자들 안에 다 사용한 자원을 해제하는 루틴을 넣으면 어떨까요?

예를 들어서 위 포인터 pa 의 경우 객체가 아니기 때문에 소멸자가 호출되지 않습니다. 그렇다면 그 대신에, pa 를 일반적인 포인터가 아닌, 포인터 ‘객체’ 로 만들어서 자신이 소멸 될 때 자신이 가리키고 있는 데이터도 같이 delete 하게 하면 됩니다. 즉, 자원 (이 경우 메모리) 관리를 스택의 객체 (포인터 객체) 를 통해 수행하게 되는 것입니다.

std::unique_ptr<A> pb = std::move(pa);

unique_ptr 은 복사 생성자는 정의되어 있지 않지만, 이동 생성자는 가능 합니다. 왜냐하면, 마치 소유권을 이동시킨다 라는 개념으로 생각하면 되기 때문이지요.

멤버 함수를 가지는 std::function

사실 멤버 함수들은 구현 상 자신을 호출한 객체를 인자로 암묵적으로 받고 있었습니다.

std::function<int(A&)> f1 = &A::some_func;
std::function<int(const A&)> f2 = &A::some_const_function;

멤버 함수가 아닌 모든 함수들의 경우 함수의 이름이 함수의 주소값으로 암시적 변환이 일어나지만, 멤버 함수들의 경우 암시적 변환이 발생하지 않으므로 & 연산자를 통해 명시적으로 주소값을 전달해줘야 합니다.

캐시

https://modoocode.com/271#page-heading-2

#

thread번호에 따라서 jobs vector에서 몇 번째 index를 책임져야하는지 정해진다.

thread 2, jobs vector.size() ==4 라면 thread 1은 jobs[0~1] thread 2는 jobs[2~3]

https://modoocode.com/285

Tags:

Categories:

Updated: