什么是WSGI(Web服务器网关接口)?

马哥Linux运维

共 1801字,需浏览 4分钟

 · 2021-04-12

WSGI是指Web服务器网关接口。在部署Django或Flask应用程序时,WSGI扮演着至关重要的角色。这篇我将讨论什么是WSGI,以及WSGI是如何工作的。


WSGI
WSGI是描述Web服务器与Python Web应用程序或框架之间的通信的规范。它说明了Web服务器如何与python Web应用程序/框架通信以及如何将Web应用程序/框架链接在一起以处理请求。


PEP3333已对Python标准WSGI进行了详细说明。想深入了解的可以看python官方文档。


下图是我们创建项目后,打开看到的文件内容:


WSGI如何工作?

现在,让我们看一下WSGI的工作方式。因此,为了清楚地了解WSGI,让我们假设一个案例,有一个用Django开发的Web应用程序或Flask应用程序,如图所示。

由于Web应用程序已部署在Web服务器中。下图表示从各个用户获取请求的Web服务器。

上面的Web服务器可以是apache,NGINX等服务器,它负责处理各种静态文件和缓存目的。此外,如果愿意扩展多个应用程序,则还可以将服务器用作负载均衡器。


现在出现一个问题-Web服务器如何与Python应用程序进行交互呢?

因为Web服务器必须与Python应用程序进行交互。


因此,需要中介者来执行Web服务器和Python应用程序之间的交互。用于在Web服务器和Python应用程序之间进行通信的标准是WSGI(Web服务器网关接口)。


现在,Web服务器能够发送请求或与WSGI容器进行通信。同样,Python应用程序提供了一个“可调用”对象,其中包含WSGI应用程序调用的某些功能,这些功能是根据PEP 3333标准定义的。因此,存在多个可用的WSGI容器,例如Gunicorn,uWSGI等。

下图表示在Web服务器,WSGI和Python应用程序之间进行的通信。

今天有多个WSGI容器可用。因此,需要在项目中安装WSGI容器,以便Web服务器可以与WSGI容器进行通信,该WSGI容器进一步与Python应用程序进行通信并相应地提供响应。最终,当Web服务器获得响应后,它将被发送回Web浏览器/用户。


为什么要使用WSGI,而不是直接将Web服务器指向Django或Flask应用程序?
如果直接将Web服务器指向应用程序,则会降低应用程序的灵活性。现在,让我们看一个示例,以使清楚地了解WSGI的适用性。例如,今天决定使用Gunicorn部署应用程序,但是几年后,我们决定从Gunicorn切换到mod_wsgi。现在,在这种情况下,可以轻松切换到mod_wsgi,而无需在实现WSGI的应用程序或框架中进行任何更改。因此,WSGI为应用程序提供了灵活性。


使用WSGI的另一个原因是由于其可伸缩性。一旦应用程序上线,启动并运行,应用程序中就会有成千上万的请求。因此,WSGI能够一次处理数千个请求。众所周知,WSGI服务器负责处理来自Web服务器的请求,并做出决定将这些请求传递给应用程序框架的流程。在这里,我们可以在服务器之间分配职责,以扩展Web流量。

WSGI服务器的实现


有各种支持WSGI的服务器。

在此问中,我将概述一些WSGI服务器,这些服务器主要用于Flask / Django应用程序的部署。

Gunicorn (Green Unicorn)

Gunicorn是基于前叉工作者模型的服务器,与各种Web框架兼容。另外,它很容易实现。

uWSGI
uWSGI以高性能WSGI服务器实现而闻名。uWSGI可用于Python应用程序的开发和部署。在uWSGI中,应用程序服务器,代理,流程管理器和监视器都是通过通用API和通用配置样式实现的,这使UWSGI成为对开发人员友好的WSGI服务器。

mod_wsgi
mod_wsgi是一个python软件包,提供了一个Apache模块,该模块实现了WSGI兼容接口,用于在Apache Web服务器之上托管基于Python的Web应用程序。


以上就是全部的内容,希望对小伙伴们学习上有帮助。

文章转载:python运维技术
(版权归原作者所有,侵删)


浏览 127
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报