卒業証書のためのさらに別のツールプロジェクト
開始する前に、基本的な関数をテストしてみてください。すべてのモジュールの中で、テストする典型的なパーツは3つのサーバー/プロキシの実装です。
$ 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の接続速度が遅いため、プロキシチャインを使用してHTTPProxyのテストをスピードアップする必要がある場合があります。また、 proxychains can't load process bash -c "python3 file.py"に発生する可能性があります。
$ 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) /usr/bin/python3非ルートユーザーと結合するには、Pythonバイナリのcapabilityを設定する必要があります。
$ 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.logProjectのFastCGiproxyモジュールは、 cgi-fcgiを使用してFastCGIと通信します。CGI-FCGIは、Debianシリーズまたは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を使用して未知の問題があります。PipeDINTERINATESOELINATES OELINATEで実行されたプロセスは、エグジットコード11および出力NOコンテンツを使用しています。したがって、大きなファイルをアップロードする必要があり、プロジェクトがWSLに展開されている場合は、UNIXドメインソケットの代わりに上流の高速でTCPを使用します。
さらに、試してみるべきタイマーモジュールとワーカーモジュールがあります。これらは、学習を目的として記述されており、思い出させるために、後者は安定していません。
タイマーモジュールのファイルはすべて、k-ary HeapまたはRed-blackツリーをデータ構造として実装したディレクトリtimerの下にあります。ワーカーモジュールのコードはworkerディレクトリにあり、設計はGunicornのアービターに触発されており、信号を速すぎる場合、実装は予想どおりに機能することは保証されていません。その場合、残されたゾンビプロセスに注意する必要があります。
リリースを参照してください