졸업장을위한 또 다른 도구 프로젝트
시작하기 전에 기본 기능을 테스트하십시오. 모든 모듈 중에서 테스트 할 일반적인 부품은 세 가지 서버/프록시 구현입니다.
$ cd /path/to/project/root/directory
$ PYTHONPATH=. python3 server/static_file.py > log/static.log
$ PYTHONPATH=. python3 server/fastcgi_proxy.py > log/fastcgi.log
$ PYTHONPATH=. python3 server/http_proxy.py > log/http.log httpbin.org의 연결 속도가 느리기 때문에 proxychain을 사용하여 HTTPProxy 의 테스트 속도를 높이기 위해서는 proxychains와 같은 오류가 기본 쉘로 Dash를 사용하는 경우 bash -c "python3 file.py" 와 같은 오류가 발생할 수 proxychains can't load process .
$ PYTHONPATH=. proxychains4 python3 server/http_proxy.py > log/http.log
$ PYTHONPATH=. proxychains4 bash -c " python3 server/http_proxy.py > log/http.log " 마지막으로 config/config.yaml 에서 구성을 변경 한 다음 기본 서버를 시작하고 사이트를 방문하여 모든 것이 잘 작동하는지 확인할 수 있습니다.
$ PYTHONPATH=. python3 main.py host:port 쌍은 localhost:80 이며, 이런 종류의 "권한있는"포트 (1-1023)를 뿌리가 아닌 사용자와 바인딩하려면 Python Binary의 capability 설정해야합니다 /usr/bin/python3 :
$ sudo setcap ' cap_net_bind_service=+ep ' /usr/bin/python3 log/ 원하는 경우 main.log 모든 요청 및 응답의 전체 프로세스를 기록하며 (static|fastcgi|http).log 이전에 언급 된 테스트 결과입니다.
다른 모듈 테스트를 포함한 위의 모든 테스트는 이제 modtests.sh 의 도우미 스크립트로 기록되며, 직접 실행하고 결과를 볼 수 있습니다. tee 사용하여 로그 파일에 출력을 복제하고 나중에 확인할 수 있습니다.
$ ./modtests.sh 2>&1 | tee modtests.log Project의 FastCgiproxy 모듈은 cgi-fcgi 사용하여 FASTCGI와 통신합니다. CGI- yum --enablerepo=epel install fcgi 에 apt-get install libfcgi0ldbl 설치할 수 있습니다.
application 데모 프로젝트로 사용하는 경우 PHP 종속성에 따라 다음과 같습니다.
php-mysqlphp-gdphp-fpm 버퍼 크기 readbuf.first 전체 HTTP 헤드 부분을 읽을 수있을만큼 크다고 가정합니다. 프로그램은 헤더 값을 사용하여 여전히 수신 할 왼쪽 부분이 있는지 여부를 결정하고 버퍼 크기 readbuf.left 사용하여 나머지 부분을 읽습니다.
파라미터 fastcgi.upstream TCP host:port 쌍 또는 UNIX 도메인 소켓 파일로 구성 할 수 있지만 WSL 플랫폼에서 UNIX 도메인 소켓이있는 cgi-fcgi 사용하는 알려지지 않은 문제가 있습니다. Pipe에서 많은 입력으로 실행 된 프로세스는 Exit Code 11 및 출력 크기가 65566보다 크지 않습니다. 따라서 큰 파일을 업로드 할 필요가 있고 WSL에 프로젝트가 배포 된 경우 Unix 도메인 소켓 대신 FASTCGI 업스트림 대신 TCP를 사용하십시오.
또한, 시도 할 타이머 모듈과 작업자 모듈이 있으며, 이는 학습 목적으로 작성되었으며, 후자는 안정적이지 않습니다.
타이머 모듈의 파일은 모두 디렉토리 timer 아래에 있으며 K-Ary 힙 또는 빨간색 블랙 트리가 데이터 구조로 구현됩니다. 코드의 코드 모듈은 worker 디렉토리에 있으며 디자인은 Gunicorn의 중재자에서 영감을 얻었으며 신호를 너무 빨리 보내는 경우 구현이 예상대로 작동하지 않습니다.이 경우 남은 좀비 프로세스를 알고 있어야합니다.
릴리스를 참조하십시오