CGI 인스턴스를 쉽게 추가 할 수있는 C ++ 11을 기반으로 한 HTTP 서버 구현. 정적 자원을 처리하고 HTTP 긴 연결을 지원할 수 있습니다. 또한 서버의 상태를 기록하기 위해 비동기 로그를 구현합니다.
테스트 페이지 : examplecgi, logincgi 및 uploadcgi
a) 소스 파일을 이진 실행 파일로 컴파일하려면 (루트 폴더에서)
bash install.shb) 프로그램 실행 (빌드 폴더에서)
cd build
./httpcgiservermaina) examplecgi와 같이 Basecgi 클래스를 물려받는 CGI 인스턴스 클래스를 작성하십시오.
b) CGI 인스턴스를 cgiinstancefactory에 추가하십시오.
c) 헤더 파일을 cgiheader에 추가하십시오.
d) cmakelists.txt를 수정하십시오.
e) 그런 다음 빌드 및 실행.
Webbench 의 테스트 결과는 여기에 표시됩니다.
구현에 대한 간단한 개요는 impldoc.md를 참조하십시오. 헤더 파일 안내서 :
비동기 로그에서 온 로그 시스템의 Base/Log.h 인터페이스.
epoller.h epoll의 관련 기능을 캡슐화합니다.
netutil.h 소켓 FD의 관련 기능을 캡슐화합니다.
SimpleBuffer.h 응용 레이어 버퍼 (지금만 LT 모델 만 구현).
channel.h 캡슐화 채널 (이벤트) 관련 콜백 함수 (읽기/쓰기/오류 함수).
MinHeap.h 최소 힙을 사용하여 만료 된 연결 시간을 관리합니다.
EventLoop.h 는 에폴러에 등록되는 채널 (이벤트)을 관리하고 활성 채널 (이벤트)을 처리합니다.
eventLoopTheRed.h 연결 큐를 관리하고 메인 허용 스레드 푸시 연결 소켓 FD가 큐에 들어간 다음이 스레드는 소켓 FD를 EventLoop에 추가합니다.
eventLoopTheRdreadPool.h 여러 스레드를 관리하고 메인 허용 스레드 푸시 연결 소켓 FD를 ThreadPool에 넣고 소켓을 스레드로 발산합니다.
TCPSERVER.H 연결 소켓 FD를 수락하고 연결 소켓에서 읽기 이벤트가 작동하면 채널의 응용 프로그램 버퍼로 바이트 스트림을 자동으로 읽고 읽기 콜백 함수를 실행합니다. 쓰기 및 오류 사건과 동일합니다.
httpmessage.h HTTP 요청을 구문 분석하고 HTTP 응답 메시지를 작성하십시오. 여기서는 상태 기계를 사용하여 HTTP 요청을 처리합니다.
basecgi.h CGI 인스턴스 클래스의 추상 클래스. 프로세스 인터페이스를 제공하고 CGI 요청을 처리하는 데 사용합니다.
CGIDISPATCH 에 사용되는 CGI 인스턴스 클래스가 포함되어 있습니다.
CGIDISPATCH.H CGI 인스턴스를 찾기 위해 URL을 사용하는 CGI 디스패처는 CGI 프로그램을 실행합니다.
httpcgiserver.h 읽기 이벤트가 일어 났을 때, 먼저 채널의 응용 프로그램 버퍼에서 HTTP 요청을 구문 분석 한 다음 CGI 인스턴스를 찾아 요청을 처리합니다.
httpcgiservermain.cpp http 서버 메인.
examplecgi/emablecgi.h 및 logincgi/logincgi.h cgi 인스턴스 클래스를 작성하는 방법의 예. WebFile/로그인에는 logincgi 클래스가 필요로하는 .html, .js, .css 파일이 포함됩니다.