Misplaced Pages

Asynchronous Server Gateway Interface

Article snapshot taken from[REDACTED] with creative commons attribution-sharealike license. Give it a read and then ask your questions in the chat. We can research this topic together.
The topic of this article may not meet Misplaced Pages's general notability guideline. Please help to demonstrate the notability of the topic by citing reliable secondary sources that are independent of the topic and provide significant coverage of it beyond a mere trivial mention. If notability cannot be shown, the article is likely to be merged, redirected, or deleted.
Find sources: "Asynchronous Server Gateway Interface" – news · newspapers · books · scholar · JSTOR (December 2023) (Learn how and when to remove this message)
Calling convention for web servers
ASGI Specification
Version3.0
DeveloperASGI Team
Release date2019-03-04
Websiteasgi.readthedocs.io/en/latest/specs/index.html
Licensepublic domain
StatusDraft

The Asynchronous Server Gateway Interface (ASGI) is a calling convention for web servers to forward requests to asynchronous-capable Python frameworks, and applications. It is built as a successor to the Web Server Gateway Interface (WSGI).

Where WSGI provided a standard for synchronous Python application, ASGI provides one for both asynchronous and synchronous applications, with a WSGI backwards-compatibility implementation and multiple servers and application frameworks.

Example

An ASGI-compatible "Hello, World!" application written in Python:

async def application(scope, receive, send):
    event = await receive()
    ...
    await send({"type": "websocket.send", ...})

Where:

  • Line 1 defines an asynchronous function named application, which takes three parameters (unlike in WSGI which takes only two), scope, receive and send.
    • scope is a dict containing details about current connection, like the protocol, headers, etc.
    • receive and send are asynchronous callables which let the application receive and send messages from/to the client.
  • Line 2 receives an incoming event, for example, HTTP request or WebSocket message. The await keyword is used because the operation is asynchronous.
  • Line 4 asynchronously sends a response back to the client. In this case, it is a WebSocket communication.

Web Server Gateway Interface (WSGI) compatibility

ASGI is also designed to be a superset of WSGI, and there's a defined way of translating between the two, allowing WSGI applications to be run inside ASGI servers through a translation wrapper (provided in the asgiref library). A threadpool can be used to run the synchronous WSGI applications away from the async event loop.

See also

References

  1. "Version History".
  2. "Copyright". GitHub. Retrieved 2022-09-14.

External links

Python
Implementations [REDACTED]
IDEs
Topics
Designer
Python web frameworks
Web frameworks
.NET
C++
ColdFusion
Common Lisp
Haskell
Java
JavaScript
Perl
PHP
Python
Ruby
Rust
Scala
Smalltalk
Other languages
Categories:
Asynchronous Server Gateway Interface Add topic