wsgi和asgi,wsgic
WSGI和ASGI文章目录WSGI和ASGI什么是WSGI和ASGI概述区别的目的是什么
什么是WSGI?
CGI(通用网关接口)是一个定义客户端和Web服务器之间通信模式的程序。比如正常情况下,客户端发送请求,Web服务器根据HTTP协议解析请求的内容。处理后,返回的内容被封装。例如,服务器返回一个HTML页面,并根据HTTP协议构建返回内容的响应格式。TCP连接、HTTP原始请求以及对应的格式都是由一个软件完成的,这个程序就是CGI。
那么WSGI(Python Web Server Gateway Interface)Web Server Gateway Interface就是一个Web服务器和Web应用程序或者Python语言定义的框架之间的简单通用的接口。语义上,WSGI的出现是为了解决web服务器和客户端之间的通信问题。而WSGI是基于现有的CGI标准设计的,也是程序。
WSGI分为两部分,一部分是服务器或网关,另一部分是应用或应用框架。所谓的WSGI中间件实现了API的两面,即在WSGI服务器和WSGI应用程序之间起中介作用:从WSGI服务器的角度来看,中间件起应用程序的作用,从应用程序的角度来看,中间件起服务器的作用。中间件具有以下功能:
重写环境变量后,请求消息根据目标URL被路由到不同的应用程序对象。允许多个应用程序或应用程序框架在一个进程中同时运行。通过在网络上转发请求和相应的消息,实现负载平衡和远程处理。内容的后处理,如应用样表。WSGI是基于Python,以CGI为标准做一些扩展。
ASGI是什么?
WSGI规范自诞生以来就被广泛使用,在Python框架和web服务的选择上有很大的灵活性。但由于它是为HTTP风格的请求响应模型设计的,而越来越多不遵循该模型的协议也逐渐成为web编程的标准之一,比如WebSocket。所以需要新的改变。
ASGI试图保持一个简单的应用程序接口,并提供允许任何应用程序进程在任何时候发送和接收数据的抽象。
它还描述了一种与HTTP请求响应和WebSocket数据帧兼容的新串行格式。这些协议可以通过网络或本地套接字传输,不同的协议可以分配给不同的进程进行处理。
Aim网络协议服务和Python应用程序之间的标准接口可以处理各种常见的协议类型,包括HTTP、HTTP2和WebSocket。在 WSGI 上进行拓展,并最终取代它。该设计仍然包括WSGI-ASGI和ASGI-WSGI转换器,以便使HTTP协议更容易编写。
SGI由三个不同的部分组成:协议服务、频道层(channel layer)、应用代码。通道层是这个实现中最重要的部分,它可以为协议服务和应用程序提供接口。
通道层为协议服务和应用服务提供了一个可调用的send方法,该方法接受通道名、消息字典和receive_many方法作为参数。receive_many方法将通道名称列表作为参数,并返回指定通道的下一条可用消息。
所以相对于WSGI,我们把协议服务直接指向应用。在ASGI中,我们将协议服务和应用程序都指向通道层的一个实例。其目的是使应用服务和协议服务始终运行在不同的进程或线程中,并通过通道层进行通信。
总的来说,区别在于ASGI对WSGI原有模式的支持和WebSocket的扩展,即ASGI是WSGI的扩展。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。