อีกโครงการหนึ่งสำหรับประกาศนียบัตร
ก่อนเริ่มต้นลองทดสอบฟังก์ชั่นพื้นฐาน ในบรรดาโมดูลทั้งหมดชิ้นส่วนทั่วไปในการทดสอบคือการใช้งานเซิร์ฟเวอร์/พร็อกซีสามตัว:
$ 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) กับผู้ใช้ที่ไม่ใช่รูตคุณจะต้องตั้งค่า capability ของ Python Binary, Say /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 โมดูล FastCgiproxy ของ Project สื่อสารกับ FastCGI โดยใช้ cgi-fcgi ซึ่งสามารถติดตั้งได้โดย apt-get install libfcgi0ldbl ในซีรีย์ debian หรือ yum --enablerepo=epel install fcgi บน centos series
หากคุณกำลังใช้ application เป็นโครงการสาธิตจำเป็นต้องมีการพึ่งพา PHP ต่อไปนี้:
php-mysql สำหรับการเชื่อมต่อฐานข้อมูลphp-gd สำหรับการสร้างภาพ CAPTCHAphp-fpm สำหรับการทำงานด้วย fastcgi เป็นซ็อกเก็ต Unix ขนาดบัฟเฟอร์ readbuf.first ถือว่าใหญ่พอที่จะอ่านส่วนหัว HTTP ทั้งหมดเนื่องจากโปรแกรมใช้ค่าส่วนหัวเพื่อตรวจสอบว่ายังมีส่วนที่เหลืออยู่หรือไม่และถ้าเป็นจริงอ่านส่วนที่เหลือของพวกเขาโดยใช้ readbuf.left ขนาด
พารามิเตอร์ fastcgi.upstream สามารถกำหนดค่าให้เป็น host:port คู่หรือไฟล์ซ็อกเก็ตโดเมน Unix อย่างไรก็ตามมีปัญหาที่ไม่รู้จักโดยใช้ cgi-fcgi ที่มีซ็อกเก็ตโดเมน 11 บนแพลตฟอร์ม WSL: กระบวนการที่มีขนาดใหญ่กว่า 65 ดังนั้นหากมีความจำเป็นในการอัปโหลดไฟล์ขนาดใหญ่และโครงการจะถูกปรับใช้กับ WSL ให้ใช้ TCP แทนซ็อกเก็ตโดเมน UNIX เป็น FastCGI ต้นน้ำ
นอกจากนี้ยังมีโมดูลตัวจับเวลาและโมดูลคนงานที่จะลองซึ่งเขียนขึ้นเพื่อจุดประสงค์ในการเรียนรู้และได้รับการเตือนว่าอันหลังนั้นไม่เสถียร
ไฟล์ของโมดูลตัวจับเวลาทั้งหมดอยู่ภายใต้ timer ไดเรกทอรีที่ใช้กับ K-ary Heap หรือ Tree Red-Black เป็นโครงสร้างข้อมูล รหัสของโมดูลคนงานอยู่ในไดเรกทอรี worker การออกแบบได้รับแรงบันดาลใจจากผู้ตัดสินของ Gunicorn และการดำเนินการไม่รับประกันว่าจะทำงานตามที่คาดไว้หากคุณส่งสัญญาณเร็วเกินไปซึ่งในกรณีนี้คุณควรทราบกระบวนการซอมบี้ที่เหลืออยู่
ดูรุ่น