在使用ASGI
特性之前,先让我们了解下,什么是 ASGI?
ASGI
和WSGI
,都是一种 Web 服务网关接口协议,是在CGI
的标准上构建的。
CGI
(通用网关接口, Common Gateway Interface),简单来说就是解析浏览器等客户端发送给服务端的请求,并组装需要返回的 HTTP 请求的一种通用协议,处理这个过程的程序,我们就可以叫 CGI 脚本。互联网早起的动态网页都是基于CGI
标准的。
WSGI
,是一种 Python 专用的 Web 服务器网关接口,它分为两部分"服务器(或网关)"和"应用程序(或应用框架)"。「服务器」,一般独立于应用框架,为应用程序运行提供环境信息和一个回调函数(Callback Function)。当应用程序完成处理请求后,透过回调函数,将结果回传给服务器。常用的WSGI
服务器有: uwsgi
、gunicon
。「应用程序」,是各种实现了WSGI
标准的 Python web 框架了,常用的有Django
、Flask
等。
ASGI
(Asynchronous Server Gateway Interface)是 Django 团队提出的一种具有异步功能的 Python web 服务器网关接口协议。能够处理多种通用的协议类型,包括 HTTP,HTTP2 和 WebSocket。WSGI
是基于 HTTP 协议模式的,不支持WebSocket
,而ASGI
的诞生则是为了解决 Python 常用的 WSGI 不支持当前 Web 开发中的一些新的协议标准(WebSocket、Http2 等)。同时,ASGI
向下兼容WSGI
标准,可以通过一些方法跑WSGI
的应用程序。常用的「服务器」有Daphne
、Uvicorn
。
更多ASGI
资料可参考文档