ASGI ( Asynchronous Server Gateway Interface )는 비동기 가능 Python 웹 서버, 프레임 워크 및 애플리케이션 간의 표준 인터페이스를 제공하기위한 WSGI의 영적 후속 제품입니다.
WSGI가 동기식 Python 앱에 대한 표준을 제공 한 경우 ASGI는 WSGI 이전 버전과의 호환성 구현과 여러 서버 및 애플리케이션 프레임 워크를 사용하여 비동기 및 동기 앱에 대한 표준을 제공합니다.
WSGI의 문제점은 무엇입니까?
"WSGI를 업그레이드하지 않는 이유는 무엇입니까?"라고 물어볼 수 있습니다. 이것은 수년에 걸쳐 여러 번 질문을 받았으며 일반적으로 WSGI의 단일 호출 가능 인터페이스가 WebSocket과 같은 더 관련된 웹 프로토콜에 적합하지 않다는 것입니다.
WSGI 응용 프로그램은 요청을 받고 응답을 반환하는 단일 동기 호출 가능입니다. 이것은 긴 폴 HTTP 또는 WebSocket 연결에서 얻는 것과 같이 수명이 긴 연결을 허용하지 않습니다.
이 호출 가능을 비동기식으로 만들더라도 요청을 제공하는 단일 경로 만 있으므로 여러 수신 이벤트 (예 : WebSocket 프레임 수신)가있는 프로토콜이이를 트리거 할 수 없습니다.
ASGI는 어떻게 작동합니까?
ASGI는 단일 비동기 호출 가능 구조로되어 있습니다. 그것은 소요 scope인, dict특정 연결에 대한 포함 된 세부 사항, send비동기 클라이언트 응용 프로그램 전송 이벤트 메시지를 수 있습니다 호출, 및 receive응용 프로그램을 할 수 비동기 호출이 클라이언트에서 이벤트 메시지가 나타납니다.
이는 각 애플리케이션에 대해 여러 수신 이벤트와 발신 이벤트를 허용 할뿐만 아니라 백그라운드 코 루틴을 허용하여 애플리케이션이 다른 작업을 수행 할 수 있도록합니다 (예 : Redis 대기열과 같은 외부 트리거에서 이벤트 수신).
가장 간단한 형태로 애플리케이션은 다음과 같이 비동기 함수로 작성할 수 있습니다.
async def application(scope, receive, send):
event = await receive()
...
await send({"type": "websocket.send", ...})
보내거나받는 모든 이벤트dict 는 사전 정의 된 형식 의 Python 입니다. 표준의 기반을 형성하고 서버간에 애플리케이션을 스왑 할 수있는 것은 이러한 이벤트 형식입니다.
이러한 이벤트에는 각각 type이벤트의 구조를 추론하는 데 사용할 수 있는 정의 된 키가 있습니다. 다음 receive은 HTTP 요청에서 본문과 함께 수신 할 수있는 예제 이벤트입니다 .
{
"type": "http.request",
"body": b"Hello World",
"more_body": False,
}
다음은 send나가는 WebSocket 메시지를 보내기 위해 전달할 수있는 이벤트의 예입니다 .
{
"type": "websocket.send",
"text": "Hello world!",
}
'이론' 카테고리의 다른 글
WSGI.. 누구냐 넌 (0) | 2021.06.23 |
---|---|
ORM 이란 (0) | 2021.06.19 |
On Premise (0) | 2021.06.09 |
클라우드 애플리케이션을 위한 9가지 룰 (0) | 2019.08.13 |
댓글