刚开始接触到python及Flask框架时,总是会听到 wsgi等等相关的名词,以及 项目部署时会用到nginx+gunicorn等等,但是对于一个请求从 nignx到gunicorn再到falsk框架中间经历的却一直似懂非懂。现在总结一下。
WSGI server:负责从客户端接受请求,将request转发给 WSGI application,再将 WSGI application返回的response传给客户端。
WSGI application:负责接受从WSGI server 发送来的 request,出来完请求后,将response返回给WSGI server。此application可以包括多个栈结构的中间件(比如django)
WSGI:全名(Web Server Gateway Interface)是一种规范协议(和http协议一个级别),规定了WSGI server和WSGI application如何进行通信。
uWSGI:一个web服务器,实现了WSGI,uwsgi,http等协议。如下官网引用(有的教程害死人,大小写不仔细区分,导致错误的理解,所以特意看了官网的解释:https://uwsgi-docs.readthedocs.io/en/latest/index.html):
The uWSGI project aims at developing a full stack for building hosting services
uwsgi:一种通信协议,专服务于uWSGI服务器
一般通过supervisor+nginx+gunicorn的部署结构的请求步骤如下:
其实Flask等web框架内部已经有了一个 WSGI server用来接受请求,只是因为其自带的server在处理并发等情况时不够优秀,毕竟这些框架的重点放在了WSGI applicaiton的层面上。所以在生产部署时,才需要 额外的gunicorn或uWSGI服务器(实现WSGI server)来代替框架内部的WSGI server.
相关网址:
https://www.cnblogs.com/gdkl/p/6807667.html
https://www.cnblogs.com/wspblog/p/8575101.html
http://python.jobbole.com/88653/
https://blog.csdn.net/sinat_36651044/article/details/77462831