[RTMP] RTMP Relay Server 개발 계획
주차 | 날짜 | 계획 |
---|---|---|
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