ทุกครั้งที่ฉันอ่าน WSGI หรือ CGI ฉันประจบประแจง ฉันเคยลองอ่านมาก่อน แต่ไม่มีอะไรติดขัด
มันคืออะไรในภาษาอังกฤษธรรมดา?
เพียงแค่ส่งคำขอไปยังเทอร์มินัลและเปลี่ยนเส้นทางเอาต์พุตหรือไม่?
ทุกครั้งที่ฉันอ่าน WSGI หรือ CGI ฉันประจบประแจง ฉันเคยลองอ่านมาก่อน แต่ไม่มีอะไรติดขัด
มันคืออะไรในภาษาอังกฤษธรรมดา?
เพียงแค่ส่งคำขอไปยังเทอร์มินัลและเปลี่ยนเส้นทางเอาต์พุตหรือไม่?
คำตอบ:
WSGI รันตัวแปล Python บนการเริ่มต้นเว็บเซิร์ฟเวอร์ไม่ว่าจะเป็นส่วนหนึ่งของกระบวนการเว็บเซิร์ฟเวอร์ (โหมดฝังตัว) หรือเป็นกระบวนการแยกต่างหาก (โหมด daemon) และโหลดสคริปต์เข้าไป แต่ละคำขอส่งผลให้ฟังก์ชันเฉพาะในสคริปต์ถูกเรียกโดยสภาพแวดล้อมการร้องขอจะส่งผ่านเป็นอาร์กิวเมนต์ไปยังฟังก์ชัน
CGI รันสคริปต์เป็นกระบวนการแยกแต่ละคำขอและใช้ตัวแปรสภาพแวดล้อม stdin และ stdout เพื่อ "สื่อสาร" กับมัน
จากมุมมองย้อนกลับโดยสิ้นเชิง Blankman นี่คือ "Intro Page" สำหรับ Web Services Gateway Interface:
ส่วนที่หนึ่ง: บริการเว็บ
เว็บเซิร์ฟเวอร์ทำหน้าที่ตอบสนอง พวกเขานั่งรออย่างอดทนและจากนั้นก็ไม่มีการเตือนใด ๆ ทันใดนั้น:
เว็บเซิร์ฟเวอร์ (อย่างน้อยก็ยิ่งดี) ดีมากในเรื่องนี้ พวกเขาปรับขนาดการประมวลผลขึ้นและลงตามความต้องการพวกเขาสามารถสนทนากับลูกค้าที่มีปัญหามากที่สุดได้อย่างน่าเชื่อถือผ่านเครือข่ายที่คับแคบจริงๆและเราไม่ต้องกังวลกับมันเลย พวกเขาให้บริการต่อไป
นี่คือประเด็นของฉัน: เว็บเซิร์ฟเวอร์ก็แค่นั้น: เซิร์ฟเวอร์ พวกเขาไม่รู้อะไรเลยเกี่ยวกับเนื้อหาไม่มีอะไรเกี่ยวกับผู้ใช้ไม่มีอะไรนอกเหนือไปจากการรอคอยให้มากและตอบกลับอย่างน่าเชื่อถือ
เว็บเซิร์ฟเวอร์ที่คุณเลือกควรสะท้อนถึงความต้องการในการจัดส่งของคุณไม่ใช่ซอฟต์แวร์ของคุณ เว็บเซิร์ฟเวอร์ของคุณควรรับผิดชอบในการให้บริการไม่ใช่การประมวลผลหรือสิ่งที่เป็นตรรกะ
ส่วนที่สอง: ซอฟต์แวร์ (PYTHON)
ซอฟต์แวร์ไม่ได้นั่งเฉยๆ ซอฟต์แวร์มีอยู่ในเวลาดำเนินการเท่านั้น ซอฟต์แวร์ไม่สามารถรองรับได้มากนักเมื่อมีการเปลี่ยนแปลงที่ไม่คาดคิดในสภาพแวดล้อม (ไฟล์ไม่อยู่ในที่ที่คาดไว้, พารามิเตอร์ถูกเปลี่ยนชื่อเป็นต้น) แม้ว่าการเพิ่มประสิทธิภาพควรเป็นหลักการสำคัญของการออกแบบของคุณ (แน่นอน) แต่ซอฟต์แวร์เองก็ไม่ได้ปรับให้เหมาะสม นักพัฒนาเพิ่มประสิทธิภาพ ซอฟต์แวร์ดำเนินการ ซอฟต์แวร์ดำเนินการทุกอย่างในส่วน 'การพูดพึมพำโดยเจตนา' ด้านบน อาจเป็นอะไรก็ได้
ตัวเลือกหรือการออกแบบซอฟต์แวร์ของคุณควรสะท้อนถึงแอปพลิเคชันของคุณฟังก์ชันการทำงานที่คุณเลือกไม่ใช่เว็บเซิร์ฟเวอร์ที่คุณเลือก
นี่คือจุดที่วิธีดั้งเดิมในการ "รวบรวมภาษา" ไปยังเว็บเซิร์ฟเวอร์กลายเป็นเรื่องยุ่งยาก คุณต้องวางโค้ดลงในแอปพลิเคชันของคุณเพื่อรับมือกับสภาพแวดล้อมเซิร์ฟเวอร์จริงหรืออย่างน้อยก็ถูกบังคับให้เลือกไลบรารี 'wrapper' ที่เหมาะสมเพื่อรวมไว้ในรันไทม์เพื่อให้ภาพลวงตาของความสม่ำเสมอบนเว็บเซิร์ฟเวอร์
WSGI คืออะไร?
ในที่สุด WSGI คืออะไร? WSGI คือชุดของกฎที่เขียนเป็นสองส่วน พวกเขาเขียนในลักษณะที่สามารถรวมเข้ากับสภาพแวดล้อมใด ๆ ที่ยินดีต้อนรับการรวม
ส่วนแรกเขียนไว้สำหรับฝั่งเว็บเซิร์ฟเวอร์ว่า "ตกลงถ้าคุณต้องการจัดการกับแอปพลิเคชัน WSGI นี่คือวิธีคิดของซอฟต์แวร์เมื่อโหลดขึ้นมานี่คือสิ่งที่คุณต้องเตรียมไว้ให้กับแอปพลิเคชันและที่นี่ คืออินเทอร์เฟซ (เค้าโครง) ที่คุณคาดหวังได้ว่าทุกแอปพลิเคชันจะมีนอกจากนี้หากมีอะไรผิดพลาดนี่คือวิธีคิดของแอปและคุณจะคาดหวังให้แอปทำงานได้อย่างไร "
ส่วนที่สองเขียนขึ้นสำหรับซอฟต์แวร์แอปพลิเคชัน Python กล่าวว่า "ตกลงถ้าคุณต้องการจัดการกับเซิร์ฟเวอร์ WSGI นี่คือวิธีที่เซิร์ฟเวอร์จะคิดเมื่อมันติดต่อคุณนี่คือสิ่งที่คุณต้องเตรียมไว้ให้กับเซิร์ฟเวอร์และ นี่คืออินเทอร์เฟซ (เลย์เอาต์) ที่คุณสามารถคาดหวังได้ว่าทุกเซิร์ฟเวอร์จะมีนอกจากนี้หากมีอะไรผิดพลาดนี่คือวิธีที่คุณควรปฏิบัติและนี่คือสิ่งที่คุณควรแจ้งเซิร์ฟเวอร์ "
ดังนั้นคุณมีเซิร์ฟเวอร์จะเป็นเซิร์ฟเวอร์และซอฟต์แวร์จะเป็นซอฟต์แวร์และนี่คือวิธีที่พวกเขาสามารถทำงานร่วมกันได้อย่างยอดเยี่ยมโดยไม่ต้องให้ค่าเผื่อใด ๆ สำหรับข้อมูลจำเพาะของอีกเครื่องหนึ่ง นี่คือ WSGI
mod_wsgi ในทางกลับกันเป็นปลั๊กอินสำหรับ Apache ที่ช่วยให้สามารถพูดคุยกับซอฟต์แวร์ที่รองรับ WSGI กล่าวอีกนัยหนึ่ง mod_wsgi คือการใช้งานใน Apache - ของกฎของส่วนหนึ่งของกฎข้างต้น
ส่วนซีจี .... ขอคนอื่น :-)
หากคุณไม่ชัดเจนเกี่ยวกับคำศัพท์ทั้งหมดในพื้นที่นี้และลองมาดูกันมันเป็นคำย่อที่ทำให้สับสนนอกจากนี้ยังมีโปรแกรมอ่านพื้นหลังที่ดีในรูปแบบของpython HOWTO อย่างเป็นทางการซึ่งกล่าวถึง CGI กับ FastCGI กับ WSGI เป็นต้น บน. ฉันหวังว่าฉันจะอ่านมันก่อน
ทั้ง CGI และ WSGI กำหนดอินเทอร์เฟซมาตรฐานที่โปรแกรมสามารถใช้เพื่อจัดการกับคำขอเว็บ อินเทอร์เฟซ CGI อยู่ในระดับที่ต่ำกว่า WSGI และเกี่ยวข้องกับเซิร์ฟเวอร์ที่ตั้งค่าตัวแปรสภาพแวดล้อมที่มีข้อมูลจากคำขอ HTTP โดยโปรแกรมจะส่งคืนสิ่งที่จัดรูปแบบไว้ค่อนข้างเหมือนกับการตอบสนองของเซิร์ฟเวอร์ HTTP เปล่า
ในทางกลับกัน WSGI เป็นอินเทอร์เฟซเฉพาะของ Python ซึ่งมีระดับสูงกว่าเล็กน้อยซึ่งช่วยให้โปรแกรมเมอร์สามารถเขียนแอปพลิเคชันที่ไม่เชื่อเรื่องพระเจ้าของเซิร์ฟเวอร์และสามารถรวมเข้ากับแอปพลิเคชัน WSGI อื่น ๆ (มิดเดิลแวร์) ได้