9 Python Web Servers ที่ต้องลองสำหรับโครงการต่อไปของคุณ

เผยแพร่แล้ว: 2022-09-06

ในบทความนี้ เรานำเสนอ เว็บเซิร์ฟเวอร์ Python หลายตัวที่คุณสามารถใช้เพื่อปรับใช้แอปพลิเคชัน Python ของคุณ

เราจะเริ่มด้วยการทำความเข้าใจวิธีการทำงานของเว็บเซิร์ฟเวอร์และความต้องการอินเทอร์เฟซเกตเวย์ของเซิร์ฟเวอร์ จากนั้น เราจะดูรายชื่อเว็บเซิร์ฟเวอร์ Python พร้อมกับคุณสมบัติเด่นของพวกเขา ส่วนใหญ่มีให้เป็นแพ็คเกจ PyPI ที่คุณสามารถติดตั้งและเริ่มใช้งานในโครงการของคุณได้

เอาล่ะ!

เว็บเซิร์ฟเวอร์คืออะไร?

เมื่อพัฒนาแอปพลิเคชัน Python คุณจะต้องใช้เซิร์ฟเวอร์การพัฒนาเพื่อทดสอบแอปของคุณ อย่างไรก็ตาม เมื่อการพัฒนาเสร็จสิ้น คุณจะต้องปรับใช้แอปของคุณบนเซิร์ฟเวอร์ระดับที่ใช้งานจริง ในบรรดาชั้นการทำงานที่เพิ่มเข้ามาหลายชั้น เว็บเซิร์ฟเวอร์ควรมีฟังก์ชันพื้นฐานของเซิร์ฟเวอร์ HTTP

python-web-server

เว็บเซิร์ฟเวอร์ Python ควรจะสามารถจัดการคำขอ HTTP (คำขอ HTTP อย่างง่าย เช่น GET, PUT และ POST) จากไคลเอนต์ เช่น เว็บเบราว์เซอร์ และส่งคืนการตอบกลับ การตอบสนองนี้อาจรวมถึงรหัสสถานะ HTTP ที่ระบุว่าคำขอได้รับการประมวลผลสำเร็จหรือไม่ อาจประกอบด้วยหน้าเว็บ HTML และข้อมูลกึ่งโครงสร้าง เช่น JSON, XML และอื่นๆ

ASGI กับ WSGI: การทำความเข้าใจอินเทอร์เฟซเกตเวย์ของเซิร์ฟเวอร์

สมมติว่าคุณได้พัฒนาแอปพลิเคชัน Python ในกรอบงานที่คุณเลือก เช่น Django หรือ Flask เซิร์ฟเวอร์ทั่วไปอาจไม่สามารถเข้าใจและประมวลผลคำขอที่ส่งไปยังแอปพลิเคชัน Python ได้ นี่คือที่มาของอินเทอร์เฟซเกตเวย์เซิร์ฟเวอร์

อินเทอร์เฟซเกตเวย์นี้สามารถเป็น Web Server Gateway Interface ( WSGI ) หรือ Asynchronous Server Gateway Interface ( ASGI ) เว็บเซิร์ฟเวอร์ได้รับคำขอจากลูกค้า ซึ่งจากนั้นจะเปลี่ยนเส้นทางไปยังอินเทอร์เฟซเกตเวย์ของเซิร์ฟเวอร์ อินเทอร์เฟซ (WSGI/ASGI) โต้ตอบกับแอปพลิเคชัน Python ผ่าน callable ที่เปิดเผย

python-web-server-asgi-wsgi

Web Server Gateway Interface ( WSGI ) จัดการคำขอตามลำดับ หากมีคำขอ HTTP ที่ช้าหลายครั้ง คำขอนั้นจะส่งผลต่อปริมาณงาน

Asynchronous Server Gateway Interface หรือ ASGI เป็นตัวต่อจาก WSGI และมีความสามารถเพิ่มเติมในการจัดการคำขอแบบอะซิงโครนัส

สมมติว่าคำขอที่ให้บริการในปัจจุบันต้องการการอ่านฐานข้อมูล (ซึ่งอาจใช้เวลานาน) และกำลังรอการตอบกลับ เมื่อคำขอแรกกำลังรอการตอบกลับ ASGI สามารถจัดการกับคำขอที่เข้ามาครั้งที่สองได้

ซึ่งตรงกันข้ามกับ WSGI ซึ่งคำขอแรกต้องได้รับการประมวลผลก่อนคำขอที่สอง ดังนั้น การใช้ ASGI อาจส่งผลให้มีปริมาณงานเพิ่มขึ้น ASGI ยังให้คุณใช้ความสามารถของ Python แบบอะซิงโครนัสภายในแอปพลิเคชันของคุณ

Python เว็บเซิร์ฟเวอร์

ตอนนี้ มาดูรายชื่อเว็บเซิร์ฟเวอร์ที่คุณสามารถใช้สำหรับแอปพลิเคชัน Python ของคุณ เรายังได้รวมกรอบงานบางอย่างที่ให้การสนับสนุนแบบสำเร็จรูปสำหรับเซิร์ฟเวอร์ที่พร้อมสำหรับการผลิต นี่ไม่ใช่รายการที่ละเอียดถี่ถ้วน และคำแนะนำของเว็บเซิร์ฟเวอร์ด้านล่างนี้ไม่ได้เรียงลำดับเฉพาะใดๆ

ยูวิคอร์น

หากคุณคุ้นเคยกับการพัฒนาแอปพลิเคชันด้วย FastAPI คุณจะพบกับ Uvicorn ซึ่งเป็นการนำเว็บเซิร์ฟเวอร์ไปใช้ Uvicorn เป็นการใช้งานเซิร์ฟเวอร์ ASGI สำหรับ Python

python-web-server-uvicorn

ในการติดตั้ง Uvicorn และการพึ่งพาที่เกี่ยวข้องโดยใช้ pip ให้รันคำสั่งต่อไปนี้:

 $ pip install uvicorn[standard] # includes installation of optional and Cython-based dependencies

ต่อไปนี้เป็นคุณสมบัติเด่นของ Uvicorn:

  • การนำ ASGI ไปใช้
  • รองรับการรันแอพจากสภาพแวดล้อม Python แบบอะซิงโครนัส
  • เครื่องมือบรรทัดคำสั่งพร้อมรายการตัวเลือกมากมาย
  • รองรับการรันแอพพลิเคชั่นจากฟังก์ชั่นโรงงาน
  • ให้คุณสมบัติในการควบคุมอินสแตนซ์ของเซิร์ฟเวอร์โดยทางโปรแกรม

Gunicorn

Gunicorn เป็นเซิร์ฟเวอร์ WSGI สำหรับแอปพลิเคชัน Python ซึ่งเป็นที่รู้จักกันดีในด้านคุณสมบัติการจัดการกระบวนการขั้นสูง

gunicorn-python-web-server

Uvicorn ให้คลาสคนงาน Gunicorn ช่วยให้คุณบรรลุประสิทธิภาพและข้อได้เปรียบในการจัดการกระบวนการพร้อมกัน หน้าเอกสารนี้มีรายละเอียดเกี่ยวกับการปรับใช้ Gunicorn

หากคุณมี Python 3.5 ขึ้นไป คุณสามารถติดตั้ง Gunicorn โดยใช้ pip:

 $ pip install gunicorn

ต่อไปนี้เป็นคุณสมบัติเด่นของ Gunicorn:

  • ง่ายและรวดเร็ว
  • เข้ากันได้กับเว็บเฟรมเวิร์กมากมาย
  • รองรับการใช้งานกับพร็อกซีเซิร์ฟเวอร์ HTTP
  • การจัดการกระบวนการขั้นสูง

CherryPy

CherryPy เป็นเว็บเฟรมเวิร์กของ Python เช่นเดียวกับ Django, Flask และ FastAPI แต่ไม่ได้รับความนิยมเท่ากับเฟรมเวิร์กเหล่านี้ CherryPy มีเวอร์ชันที่เสถียรหลายเวอร์ชันและได้พัฒนาเป็นเฟรมเวิร์กที่ครบถ้วนมากว่าทศวรรษ นอกจากนี้ยังมีชุมชนนักพัฒนาที่สนับสนุน

เชอรี่ปี้

คุณสามารถตรวจสอบ Zen of CherryPy ที่น่าสนใจ ซึ่งสื่อถึงแก่นแท้ที่ CherryPy เป็นเฟรมเวิร์กที่เรียบง่ายแต่ทรงพลัง

CherryPy เป็นเฟรมเวิร์ก Python และไม่ใช่เว็บเซิร์ฟเวอร์ แต่อยู่ในรายการของเรา เนื่องจากรองรับเซิร์ฟเวอร์ระดับโปรดักชันโดยกำเนิด ซึ่งแตกต่างจากเฟรมเวิร์กอื่นๆ ส่วนใหญ่

ในการติดตั้ง CherryPy และเริ่มต้น ให้เรียกใช้:

 $ pip install CherryPy

ต่อไปนี้เป็นคุณสมบัติเด่นของ CherryPy:

  • เฟรมเวิร์ก Pythonic โดยใช้ Python เชิงวัตถุ เหมาะสำหรับผู้เริ่มต้น
  • รองรับเซิร์ฟเวอร์ HTTP ที่พร้อมใช้งานจริง Cheroot
  • เรียนรู้ได้ง่ายกว่าเว็บเฟรมเวิร์กอื่นๆ เช่น Django
  • รองรับการสร้างและปรับใช้เว็บแอปอย่างง่ายกับไมโครเซอร์วิส

แดฟเน่

Django เป็นหนึ่งในเฟรมเวิร์กเว็บ Python ที่ได้รับความนิยมมากที่สุด หากคุณพัฒนาแอปพลิเคชันด้วย Django คุณอาจเคยใช้เว็บเซิร์ฟเวอร์ Daphne Daphne เป็นหนึ่งในการใช้งานเซิร์ฟเวอร์ ASGI แรกๆ ที่ใช้เป็นข้อมูลอ้างอิงสำหรับการใช้งานเซิร์ฟเวอร์ ASGI

Daphne พร้อมใช้งานเป็นแพ็คเกจ PyPI ที่คุณสามารถติดตั้งโดยใช้ pip

 $ pip install daphne

ต่อไปนี้คือบทช่วยสอนโดยละเอียดที่จะแนะนำคุณเกี่ยวกับการสร้างแอปพลิเคชัน Python ที่พร้อมสำหรับการผลิตแบบฟูลสแตก

ต่อไปนี้เป็นคุณสมบัติเด่นของ Daphne:

  • ใช้กันอย่างแพร่หลายในสภาพแวดล้อมการผลิต
  • ข้อมูลอ้างอิงสำหรับการใช้งานเซิร์ฟเวอร์ ASGI ทั้งหมด
  • รองรับโปรโตคอล HTTP, HTTP2 และ WebSocket

Python Trio

โปรเจ็กต์ Trio มีเป้าหมายเพื่อให้ความสามารถ I/O แบบอะซิงโครนัสระดับโปรดักชั่น: รองรับ I/O แบบขนานและการทำงานพร้อมกัน โปรเจ็กต์นี้ยังมีเว็บและไลบรารี HTTP Python จำนวนมาก

คุณสามารถติดตั้ง Trio รุ่นล่าสุด (มิถุนายน 2565) จาก PyPI

 $ pip install trio

นี่คือรายการไลบรารี Trio ที่มีประโยชน์สำหรับการเขียนโปรแกรมเว็บด้วย Python:

  • hypercorn : Hypercorn เป็นเซิร์ฟเวอร์ ASGI ที่รองรับ HTTP
  • muffin : Muffin เป็นเว็บเฟรมเวิร์ก ASGI สำหรับ Python
  • startlette : Starlette เป็นเฟรมเวิร์ก ASGI ที่มีน้ำหนักเบา
  • trio-websocket : รองรับเซิร์ฟเวอร์ WebSocket และไคลเอนต์
  • httpx : ไคลเอนต์ HTTP สำหรับ Python

เว็บบิดเบี้ยว

Twisted เป็นเฟรมเวิร์กสำหรับแอปพลิเคชัน Python เฟรมเวิร์กที่ขับเคลื่อนด้วยเหตุการณ์นี้มีโมดูลสำหรับการเขียนโปรแกรมเว็บที่เรียกว่า twisted.web

คุณสามารถติดตั้ง Twisted และโมดูลที่เกี่ยวข้องโดยใช้ pip:

 $ pip install Twisted

ต่อไปนี้เป็นคุณสมบัติเด่นของ Twisted:

  • คุณสมบัติที่เป็นมิตรกับนักพัฒนา เช่น การทดสอบหน่วยและการตรวจสอบรหัสคงที่
  • twisted.web ให้บริการเซิร์ฟเวอร์ WSGI และรองรับไคลเอนต์ HTTP และเซิร์ฟเวอร์

AIOHTTP

AIOHTTP เป็นไลบรารี Python ที่ให้ความสามารถด้านไคลเอ็นต์และเซิร์ฟเวอร์ผ่าน API ของไคลเอ็นต์และเซิร์ฟเวอร์

นี่คือวิดีโอที่มีประโยชน์ซึ่งอธิบายความสามารถในการเขียนโปรแกรมแบบอะซิงโครนัสในฝั่งไคลเอ็นต์เพื่อเพิ่มความเร็วให้กับคำขอไปยัง API อย่างมาก

ต่อไปนี้เป็นคุณสมบัติเด่นของ AIOHTTP:

  • รองรับทั้งเซิร์ฟเวอร์ HTTP และการทำงานของไคลเอนต์
  • รองรับการบันทึกเพื่อให้แก้ไขจุดบกพร่องได้ง่ายขึ้น จัดเตรียมการบันทึกสำหรับไคลเอ็นต์ เซิร์ฟเวอร์ ซ็อกเก็ตเว็บ และอื่นๆ
  • การสนับสนุนดั้งเดิมสำหรับการทดสอบผ่านปลั๊กอิน pytest สำหรับการทดสอบ: pytest-aiohttp ซึ่งมีให้ใช้งานเป็นแพ็คเกจ PyPI

พายุทอร์นาโด

Tornado เป็นเว็บเฟรมเวิร์ก Python อื่นที่สนับสนุนเครือข่ายแบบอะซิงโครนัส ในช่วงไม่กี่ปีที่ผ่านมา Tornado เวอร์ชั่นเสถียรออกมามากมาย – เวอร์ชัน 6.2 ล่าสุดซึ่งเปิดตัวในเดือนกรกฎาคม 2022 ปัจจุบัน Tornado รองรับ Python 3.7 และใหม่กว่า

เช่นเดียวกับแพ็คเกจส่วนใหญ่ในรายการนี้ Tornado สามารถติดตั้งได้โดยใช้ pip :

 $ pip install tornado

ต่อไปนี้เป็นคุณสมบัติเด่นของพายุทอร์นาโด:

  • รองรับพายุทอร์นาโดของเซิร์ฟเวอร์ HTTP tornado.httpserver เซิร์ฟเวอร์และไคลเอนต์
  • ปรับขนาดได้และใช้เครือข่าย I/O . ที่ไม่ปิดกั้น
  • เหมาะอย่างยิ่งสำหรับการใช้งานที่ต้องการการเชื่อมต่อเป็นระยะเวลานานขึ้นอย่างมาก
  • ยูทิลิตี้สำหรับการบันทึก การทดสอบหน่วย และอื่นๆ
  • การผสานรวมกับบริการสำหรับการรับรองความถูกต้องอย่างราบรื่น

ไมน์เฮลด์

Meinheld เป็นเซิร์ฟเวอร์ WSGI สำหรับ Python ใช้และสร้างไลบรารีที่มีอยู่สำหรับการจัดการเหตุการณ์และการประมวลผลคำขอ HTTP

คุณสามารถติดตั้ง Meinheld โดยใช้ pip:

 $ pip install meinheld

คุณสมบัติบางอย่างของ Meinheld:

  • ใช้ไลบรารี http-parser เพื่อจัดการคำขอ HTTP ขาเข้า
  • สร้างขึ้นบนไลบรารี picoev สำหรับการจัดการเหตุการณ์

บทสรุป

ฉันหวังว่าคุณจะพบว่ารายการเว็บเซิร์ฟเวอร์ Python นี้มีประโยชน์ อย่าลืมลองใช้ในโครงการในอนาคตของคุณ เราได้ระบุคุณสมบัติที่สำคัญ เพื่อให้เข้าใจถึงการพึ่งพาและวิธีการทำงานอย่างถ่องแท้ คุณจะต้องใช้มันในแอปพลิเคชันของคุณ

หากคุณต้องการเพิ่มระดับทักษะ Python ของคุณ ลองพิจารณาดูไลบรารีบทช่วยสอน Python ของ Geekflare มีความสุขในการเข้ารหัส!