首先,让我们先看看当用户从鸟瞰的角度使用web应用程序时会发生什么。
web 服务器
假设你是一个web服务器,就像Gunicorn一样。你的工作由以下部分组成:
- 你坐在那里,耐心地等待某个客户的请求。
- 当客户向你提出请求时,你会收到它。
- 然后,你把这个请求交给一个叫PythonApp的人,对他说:“嘿,伙计,醒醒!这是一个非常重要的客户的要求。求你了,想想办法吧。
- 你从这个PythonApp得到一个响应。
- 然后,您将此响应反馈给您的客户。
这是你唯一能做的事。你只需要服务你的客户。你对内容或其他东西一无所知。所以你才会这么擅长。您甚至可以根据客户的需求来伸缩处理。你专注于这个单一的任务。
web 应用程序
PythonApp是你的软件。虽然web服务器应该一直存在并等待传入请求,但您的软件仅在执行时存在:
- web服务器唤醒它并向它发送请求。
- 它接受请求并在请求上执行一些命令。
- 它向web服务器返回响应。
- web服务器将此响应发送回客户端。
- 它继续睡觉。
- web服务器将此响应发送回客户端。
它所做的唯一的一件事就是在被要求执行时执行。
存在的问题
上面的场景都很好。然而,web服务器与PythonApp的对话可能会有所不同。
可能是这样对话的:
"嘿,伙计,醒醒吧!这里是一个非常重要的客户端的请求。请做点什么"
或者是这样的:
"Hey dude, wake up! Here's a request from a very important client. Please, do something about it."
再或者是这样的:
"Ehi amico, svegliati! Ecco una richiesta da un cliente molto importante. Si prega, fare qualcosa al riguardo"
甚至可能是这样的:
"Эй, чувак, проснись! Вот запрос от очень важного клиента. Пожалуйста, сделай что нибудь."
你明白了吗? web服务器可以以多种不同的方式运行,而PythonApp需要学习所有这些语言来理解它在说什么并相应地运行。
这意味着在过去(在WSGI出现之前),你必须调整你的软件以适应web服务器的需求。此外,您必须编写不同类型的包装器,以便使其适用于不同的web服务器。开发人员通常不希望处理这样的事情。他们只是想写代码。
WSGI来帮忙
你可以将其看作web服务器和web应用程序的一组规则。
web服务器的规则如下所示:
如果你想和PythonApp对话,请说出这些单词和句子。同时,也要学习这些单词,因为它们会对你产生反馈。此外,如果出了什么问题,这里是PythonApp会说的"骂人"的话,以及你应该如何应对它们。
web应用程序的规则如下所示:
如果您想与web服务器对话,请学习这些单词,因为web服务器在寻址时将使用它们。另外,使用这些词并确保web服务器理解它们。此外,如果出了什么问题,使用这些 "咒骂" 的话和这样的行为。
这就是WSGI发挥作用的地方