Ein weiteres Werkzeugprojekt für Diplom
Versuchen Sie vor dem Start, die Grundfunktionen zu testen. Unter allen Modulen sind typische Teile zu testen die drei Server-/Proxy -Implementierungen:
$ 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 Aufgrund der langsamen Verbindungsgeschwindigkeit von httpbin.org müssen Sie möglicherweise Proxychain verwenden, um die Tests von HTTPProxy zu beschleunigen, und möglicherweise kann ein Fehler wie proxychains can't load process , wenn Ihr Terminal die bash -c "python3 file.py" verwendet.
$ PYTHONPATH=. proxychains4 python3 server/http_proxy.py > log/http.log
$ PYTHONPATH=. proxychains4 bash -c " python3 server/http_proxy.py > log/http.log " Schließlich können Sie Konfigurationen in config/config.yaml ändern, dann den Hauptserver starten und die Website besuchen, um festzustellen, ob alles gut funktioniert:
$ PYTHONPATH=. python3 main.py Beachten Sie /usr/bin/python3 dass host:port standardmäßig localhost:80 ist, und um diese Art von "privilegierten" Ports (1-1023) mit Nicht-Root- capability zu binden.
$ sudo setcap ' cap_net_bind_service=+ep ' /usr/bin/python3 Überprüfen Sie die Protokolle unter log/ Wenn Sie möchten, erfassen main.log den vollständigen Prozess aller Anfragen und Antworten (static|fastcgi|http).log sind die Ergebnisse zuvor genannter Tests.
Alle oben genannten Tests, einschließlich der Tests anderer Module, werden jetzt als Helfer -Skript in modtests.sh geschrieben, das Sie direkt ausführen und die Ergebnisse sehen können. Sie können tee verwenden, um Ausgänge in eine Protokolldatei zu duplizieren und sie später überprüfen:
$ ./modtests.sh 2>&1 | tee modtests.log Das Fastcgiproxy-Modul von Project kommuniziert mit FastCGI mit cgi-fcgi , das durch apt-get install libfcgi0ldbl in der Debian-Serie oder yum --enablerepo=epel install fcgi kann.
Wenn Sie application als Demo -Projekt verwenden, sind die folgenden PHP -Abhängigkeiten erforderlich:
php-mysql für die Datenbankverbindungphp-gd für die Captcha-Bildgenerierungphp-fpm für das Laufen mit Fastcgi als UNIX-Socket Es wird angenommen, dass die Puffergröße readbuf.first groß genug ist, um den gesamten HTTP -Kopfteil zu lesen, da das Programm den Header readbuf.left verwendet, um festzustellen, ob noch ein links zu empfangen ist.
Parameter fastcgi.upstream kann an einem TCP- host:port oder eine UNIX-Domänen-Socket-Datei. Es gibt jedoch ein unbekanntes Problem mit cgi-fcgi mit UNIX-Domänen-Socket auf der WSL-Plattform: Der Vorgang mit großem Eingang aus Stdin endet mit dem Ausgangscode 11 und der NO-Eingabetaste. Wenn also große Dateien hochgeladen werden müssen und das Projekt auf WSL bereitgestellt wird, verwenden Sie TCP anstelle von UNIX -Domänen -Socket als FastCGI stromaufwärts.
Darüber hinaus gibt es Timer -Modul und Arbeitermodul zu versuchen, die zum Lernenszweck geschrieben sind und erinnert werden, letzteres ist nicht stabil.
Dateien des Timer-Moduls befinden sich alle unter dem Verzeichnis timer , der mit K-Ary Heap oder Rotschwarzbaum als Datenstruktur implementiert ist. Der Code of Worker -Modul befindet sich im worker , das Design ist vom Schiedsrichter von Gunicorn inspiriert, und die Implementierung funktioniert nicht wie erwartet, wenn Sie Signale zu schnell senden. In diesem Fall sollten Sie sich über die verbleibenden Zombie -Prozesse informieren.
Siehe Veröffentlichungen