Python용 ASGI 웹 서버.
문서 : https://www.uvicorn.org
Uvicorn은 Python용 ASGI 웹 서버 구현입니다.
최근까지 Python에는 비동기 프레임워크를 위한 최소한의 하위 수준 서버/애플리케이션 인터페이스가 부족했습니다. ASGI 사양은 이러한 격차를 메우며 이제 모든 비동기 프레임워크에서 사용할 수 있는 공통 도구 세트 구축을 시작할 수 있음을 의미합니다.
Uvicorn은 HTTP/1.1 및 WebSocket을 지원합니다.
pip
사용하여 설치:
$ pip install uvicorn
그러면 최소한의 (순수 Python) 종속성으로 uvicorn이 설치됩니다.
$ pip install ' uvicorn[standard] '
그러면 "Cython 기반" 종속성(가능한 경우) 및 기타 "선택적 추가 항목"을 사용하여 uvicorn이 설치됩니다.
이 맥락에서 "Cython 기반"은 다음을 의미합니다.
uvloop
설치되어 사용됩니다.httptools
에 의해 처리됩니다.또한 "선택적 추가 사항"은 다음을 의미합니다.
websockets
에 의해 처리됩니다( wsproto
사용하려면 수동으로 설치해야 합니다).--reload
플래그는 watchfiles
사용합니다.colorama
설치해야 합니다.--env-file
옵션을 사용하려면 python-dotenv
설치됩니다.--log-config
에 .yaml
파일을 제공할 수 있도록 PyYAML
설치됩니다. 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 웹 프레임워크는 WSGI 기반 프레임워크로 시작되었습니다.
WSGI 애플리케이션은 요청을 받고 응답을 반환하는 단일 동기 호출 가능 항목입니다. 이는 WSGI가 잘 지원하지 않는 장기 폴링 HTTP 또는 WebSocket 연결과 같이 장기 연결을 허용하지 않습니다.
비동기 동시성 모델을 사용하면 경량 백그라운드 작업과 같은 옵션도 허용되며 느린 HTTP 요청 처리와 같이 네트워크 I/O에서 장기간 차단되는 엔드포인트에 대한 제한 요소가 덜할 수 있습니다.
ASGI 프로토콜의 장점은 애플리케이션 프레임워크에서 서버 구현을 분리한다는 것입니다. 이를 통해 웹 서버와 애플리케이션 프레임워크가 상호 운용되는 생태계가 가능해집니다.
원래 Django 채널을 지원하기 위해 개발된 최초의 ASGI 서버 구현은 Daphne 웹 서버입니다.
프로덕션 환경에서 광범위하게 실행되며 HTTP/1.1, HTTP/2 및 WebSocket을 지원합니다.
여기에 제공된 모든 예제 애플리케이션은 대신 daphne
사용하여 동일하게 실행할 수 있습니다.
$ pip install daphne
$ daphne app:App
Hypercorn은 독립형 ASGI 서버로 분리되기 전에 처음에는 Quart 웹 프레임워크의 일부였습니다.
하이퍼콘은 HTTP/1.1, HTTP/2 및 WebSocket을 지원합니다.
또한 asyncio
의 대안으로 뛰어난 trio
비동기 프레임워크를 지원합니다.
$ pip install hypercorn
$ hypercorn app:App
Mangum은 AWS Lambda 및 API Gateway와 함께 ASGI 애플리케이션을 사용하기 위한 어댑터입니다.
Granian은 HTTP/2, TLS 및 WebSocket을 지원하는 ASGI 호환 Rust HTTP 서버입니다.
Uvicorn은 BSD 라이센스 코드입니다.
세심하게 디자인하고 제작했습니다.
— ? —