1차분 Concept
- J2EE에서 등장했던 Filter개념으로 모든 플러그인들을 해결한다.
- Filter들의 Chain이 기본이다. Chain의 끝에는 Static 파일 Service가 들어간다.
- 각각의 Filter들은 Request와 결합하여 하나의 Task를 생성한다
- 특정 Request에 연관된 Task들은 Task Chain이라고 부른다.
- Task Chain은 내포한 Task들이 종료될때마다 다른 쓰레드로 이동이 가능해야 한다.
- Network IO는 전담 Multiplexer쓰레드에서 처리한다
- 스크립트 확장은 특정 스크립트 파일을 Filter로 만들어주는 ScriptingEngine에서 처리하도록 한다.
- Request/Response의 Body부분은 std::iostream의 shared_ptr로 관리한다
2차분
- Filter는 Request Filtering과 Response Creation을 담당하는 process_request operation과 Response Filtering을 담당하는 filt_response operation 으로 이루어진다.
- response::shared_type process_request(request::shared_type)
- void filt_response(response::shared_type)
- process_request에서 response를 생성하고 나면, 그때부터 filt_response를 process_request를 실행한 역순으로 실행한다. 즉, Stack이란 이야기
- 웹서버 쪽에서는 Mime parsing(폼변수 분석)에 대한 책임을 지지 않는다. HTTP Header까지만 책임을 지고 그 뒤는 각 모듈에게 맡긴다. (이래야 대용량 전송시 커스터마이징이 쉬워진다.)
- Mime Parsing에 대한 책임을 지지 않는 대신에 Mime Parsing을 위한 라이브러리를 별도로 제공한다. ScriptingEngine에서 이를 활용할 것인지는 별도로 고려한다.