首先明确整体架构
整体架构- Nginx 作为反向代理服务器:
- 负责静态资源处理、动态请求转发以及结果的回复;
- uWSGI 作为Web服务器:
- 负责接收 Nginx 请求转发并处理后发给 Django 以及
接收 Django 返回信息转发给 Nginx;
- 负责接收 Nginx 请求转发并处理后发给 Django 以及
- Django 作为应用框架:
- 收到请求后处理数据并响应结果给 uWSGI 服务器。
彼此的通讯关系
uwsgi和WSGI协议- uwsgi和WSGI协议作为三者之间的桥梁。
理解概念
-
WSGI:
它是用在 python web 框架编写的应用程序与后端服务器之间的规范。(本例就是 Django 和 uWSGI 之间)它使得Web App可以与Web Server顺利通信。所有使用 WSGI 的服务器都可以运行使用 WSGI 规范的web 框架。它规定WSGI application应该实现为一个可调用对象。 -
uWSGI:
uWSGI: 是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。
用于接收前端服务器转发的动态请求并处理后发给 web 应用程序。 -
uwsgi:
uwsgi是uWSGI服务器实现的独有的协议。 -
wsgi.py
生成Django项目时默认生成的python文件,用于web server与Django进行通信。 -
wsgiref
Python的一个模块,Django内部的web server就是基于这个模块建立的。
原理说明
- 无论是Django自带的Web Server还是uWSGI,在启动时都会去加载你的Django项目下的wsgi.py文件,这个文件内部返回了一个application实例。
- application实例其实也是一个可调用对象,因为这个类中实现了call使得它能被像函数一样调用
- 在uWSGI中,读取完application后,会起一个主进程去监听用户的请求,根据你的配置的进程数会产生相同数量的子进程,例如你配置2个进程,则产生2个子进程。一旦有请求过来,则会让子进程去执行请求。
- 假如有3个请求同时过来,而你只配置了2个进程去处理请求,那么第三个请求将会阻塞。例如一个请求需要执行10s,则第三个请求需要执行20s.
转载请说明,谢谢~
网友评论