Python探路"/>
Python探路
一、在介绍uWSGI之前,先介绍几个概念:
1、WSGI和uwsgi是两种通信协议,而uwsgi是uWSGI服务器独有的
2、uWSGI是一个全功能的HTTP服务器,实现了WSGI协议、uwsgi协议、http协议等。它要做的就是把HTTP协议转化成语言支持的网络协议。比如把HTTP协议转化成WSGI协议,让Python可以直接使用。
参考:.htm
二、下面先介绍下WSGI服务的工作流程,最后介绍uWSGI服务的配置:
1、WSGI服务(以Django为例)一般由两部分组成,server和application:
1)、WSGI server负责从客户端接收请求,将request转发给application,将application返回的response返回给客户端;
2)、WSGI application接收由server转发的request,处理请求,并将处理结果返回给server。application中可以包括多个栈式的中间件(middlewares),这些中间件需要同时实现server与application,因此可以在WSGI服务器与WSGI应用之间起调节作用:对服务器来说,中间件扮演应用程序,对应用程序来说,中间件扮演服务器。
2、实现:
1)、WSGI application应该实现为一个可调用对象,例如函数、方法、类(包含`call`方法)。需要接收两个参数:
a、一个字典,该字典可以包含了客户端请求的信息以及其他信息,可以认为是请求上下文,一般叫做environment(编码中多简写为environ、env)
b、一个用于发送HTTP响应状态(HTTP status )、响应头(HTTP headers)的回调函数
application的流程工作流程:
a、加载所有中间件,以及执行框架相关的操作,设置当前线程脚本前缀,发送请求开始信号
b、处理请求,调用get_response()方法处理当前请求,该方法的的主要逻辑是通过urlconf找到对应的view和callback,按顺序执行各种middleware和callback
c、调用由server传入的start_response()方法将响应header与status返回给server。
2)、WSGI Server负责获取http请求,将请求传递给WSGI application,由application处理请求后返回response
server的工作流程:
3、最后来了解下uWSGI服务的配置:
[uwsgi]
http11-socket = [::]:324
http-keepalive = true
master = true
harakiri = 120
chdir = /zp/server
manage-script-name = true
mount = /client=/home/work_django/wsgi.py
processes = 8
threads = 40
pidfile = /usr/local/bin/uwsgi.pid
daemonize = /home/work_django/logs/uwsgi.log
buffer-size = 32768
listen = 1024
reload-on-rss = 512
cheaper = 2
cheaper-initial = 2
die-on-term = true
py-tracebacker = /tmp/tbsocket.
log-maxsize = 50000000
关于具体参数详解,这个网站讲解的比较详细:.html
最后提下直接通过uwsgi /home/work_django/conf/uwsgi-socket.ini即可允许uWSGI服务器
更多推荐
Python探路
发布评论