เว็บเซิร์ฟเวอร์ ASGI สำหรับ Python
เอกสารประกอบ : https://www.uvicorn.org
Uvicorn เป็นการใช้งานเว็บเซิร์ฟเวอร์ ASGI สำหรับ Python
จนกระทั่งเมื่อไม่นานมานี้ Python ยังขาดเซิร์ฟเวอร์/อินเทอร์เฟซแอปพลิเคชันระดับต่ำขั้นต่ำสำหรับเฟรมเวิร์กอะซิงก์ ข้อกำหนด ASGI เติมเต็มช่องว่างนี้ และหมายความว่าตอนนี้เราสามารถเริ่มสร้างชุดเครื่องมือทั่วไปที่ใช้งานได้บนเฟรมเวิร์กอะซิงก์ทั้งหมดแล้ว
Uvicorn รองรับ HTTP/1.1 และ WebSockets
ติดตั้งโดยใช้ pip
:
$ pip install uvicorn
สิ่งนี้จะติดตั้ง uvicorn โดยมีการพึ่งพาขั้นต่ำ (Python บริสุทธิ์)
$ pip install ' uvicorn[standard] '
สิ่งนี้จะติดตั้ง uvicorn ด้วยการพึ่งพา "แบบ Cython" (หากเป็นไปได้) และ "คุณสมบัติพิเศษเพิ่มเติม" อื่น ๆ
ในบริบทนี้ "แบบ Cython" หมายถึงสิ่งต่อไปนี้:
uvloop
จะถูกติดตั้งและใช้งานหากเป็นไปได้httptools
จะจัดการโปรโตคอล http หากเป็นไปได้นอกจากนี้ "บริการเสริม" หมายความว่า:
websockets
(หากคุณต้องการใช้ wsproto
คุณจะต้องติดตั้งด้วยตนเอง) หากเป็นไปได้--reload
แฟล็กในโหมดการพัฒนาจะใช้ watchfiles
colorama
สำหรับบันทึกสีpython-dotenv
จะถูกติดตั้งหากคุณต้องการใช้ตัวเลือก --env-file
PyYAML
จะถูกติดตั้งเพื่อให้คุณสามารถจัดเตรียมไฟล์ .yaml
ให้กับ --log-config
ได้ หากต้องการ สร้างแอปพลิเคชันใน example.py
:
async def app ( scope , receive , send ):
assert scope [ 'type' ] == 'http'
await send ({
'type' : 'http.response.start' ,
'status' : 200 ,
'headers' : [
( b'content-type' , b'text/plain' ),
],
})
await send ({
'type' : 'http.response.body' ,
'body' : b'Hello, world!' ,
})
เรียกใช้เซิร์ฟเวอร์:
$ uvicorn example:app
Python Web frameworks ที่มีชื่อเสียงส่วนใหญ่เริ่มต้นจาก WSGI-based frameworks
แอปพลิเคชัน WSGI เป็นแบบซิงโครนัสที่เรียกได้เดี่ยวที่รับคำขอและส่งคืนการตอบกลับ สิ่งนี้ไม่อนุญาตสำหรับการเชื่อมต่อที่มีอายุการใช้งานยาวนาน เช่นเดียวกับที่คุณได้รับจากการเชื่อมต่อ HTTP หรือ WebSocket แบบโพลแบบยาว ซึ่ง WSGI ไม่รองรับอย่างดี
การมีโมเดลการทำงานพร้อมกันแบบอะซิงโครนัสยังช่วยให้มีตัวเลือกต่างๆ เช่น งานพื้นหลังที่ไม่ซับซ้อน และอาจมีปัจจัยจำกัดน้อยลงสำหรับอุปกรณ์ปลายทางที่มีการบล็อกเป็นระยะเวลานานบน I/O เครือข่าย เช่น การจัดการกับคำขอ HTTP ที่ช้า
จุดแข็งของโปรโตคอล ASGI คือการแยกการใช้งานเซิร์ฟเวอร์ออกจากกรอบงานแอปพลิเคชัน สิ่งนี้ทำให้เกิดระบบนิเวศของเว็บเซิร์ฟเวอร์และเฟรมเวิร์กแอปพลิเคชันที่ทำงานร่วมกัน
การใช้งานเซิร์ฟเวอร์ ASGI ครั้งแรกซึ่งเดิมพัฒนาขึ้นเพื่อขับเคลื่อน Django Channels คือเว็บเซิร์ฟเวอร์ Daphne
มีการใช้งานอย่างกว้างขวางในการผลิต และรองรับ HTTP/1.1, HTTP/2 และ WebSockets
แอปพลิเคชันตัวอย่างใดๆ ที่ให้ไว้ที่นี่สามารถเรียกใช้โดยใช้ daphne
แทนได้เช่นกัน
$ pip install daphne
$ daphne app:App
ในตอนแรก Hypercorn เป็นส่วนหนึ่งของเฟรมเวิร์กเว็บ Quart ก่อนที่จะถูกแยกออกเป็นเซิร์ฟเวอร์ ASGI แบบสแตนด์อโลน
Hypercorn รองรับ HTTP/1.1, HTTP/2 และ WebSockets
นอกจากนี้ยังรองรับเฟรมเวิร์ก async trio
ที่ยอดเยี่ยม ซึ่งเป็นทางเลือกแทน asyncio
$ pip install hypercorn
$ hypercorn app:App
Mangum เป็นอะแดปเตอร์สำหรับใช้งานแอปพลิเคชัน ASGI กับ AWS Lambda และ API Gateway
Granian เป็นเซิร์ฟเวอร์ Rust HTTP ที่เข้ากันได้กับ ASGI ซึ่งรองรับ HTTP/2, TLS และ WebSockets
Uvicorn เป็นรหัสลิขสิทธิ์ BSD
ออกแบบและสร้างสรรค์ด้วยความใส่ใจ
- -