
guicorn 是什么?
在回答问题以前咱们先来看看
web服务器的典型过程[1]
1. 创建连接:若是没有链接,要创建链接
2. 接收请求:对客户端发来的请求进行解析。
3. 处理请求:转发给预约义的处理器。
4. 访问资源、处理资源:
访问资源 处理器根据请求访问资源,资源可能存在于数据库中或文件系统中等。
处理资源 返回数据,一般根据取出的数据对模板进行渲染(填充模板的过程)而后将渲染了的内容返回
5. 构建响应:构建http响应报文,包括响应状态码,响应头和响应实体。响应实体中包含了数据。
6. 发送响应:将响应发送给客户端,能够作 关闭链接
7. 日志记录
页面、数据的生成,session的管理, url dispatch等。也就是说,这些web应用框架主要在作第3 第4件事情。
那么1. 2. 5. 中这些相对底层的事情——对http 协议的处理是谁来作的呢?是http服务器。
那么http服务器如何与web 应用
之间框架沟通呢?这就须要
WSGI了。
WSGI 相似一种协议,定义了http服务器 和 web 应用 之间的
互相沟通的方式。
第2步到第3步,http 请求从http服务器给了web应用,中间须要经过WSGI的沟通,
一样,由第4步到第5步,web应用将响应给了http服务器,中间也须要经过WSGI沟通。
显然,它的
好处是 web应用框架与 http服务器的解耦。
另外,经过提供统一的接口,使得程序员没必要关心http协议的底层处理细节,而专一于 业务逻辑上的开发。
回到问题,guicorn是什么呢?
它实现了WSGI,同时它仍是http服务器。
由于gunicorn实现了WSGI, flask 在 gunicorn 上能跑,在其余实现了WSGI的服务器上 也能愉快地运行。
为啥要用它呢?
django 是有
本身的wsgi的,把gunicorn作django的WSGI服务器,能够很灵活地配置worker数量,以提升并发量;
当web应用长时间未响应,会重启worker进程,有『临时』起死回生的功效;其余特性。
以上讲了gunicorn的做用,下面就顺便讲一下gunicorn的配置吧:)
gunicorn的配置
bind 绑定的ip以及端口号。部署后可经过访问该ip及端口号可访问web服务。
可是一般会在gunicorn前加 nginx 作为反向代理。
workers 对应 处理进程的数目。是重要的配置。
经过命令 ps aux | grep 'gunicorn' 能够看到进程的数目与配置文件中的数目相符。
timeout 超时参数,若是web应用服务器超过了此时间仍未响应那么将重启worker,显然,重启期间 服务不可用。
假如web应用服务器在重启前 阻塞住了,那么重启以后阻塞
可能 消失,此时服务可用。但若是阻塞缘由
没有消除,
那么web应用服务器 迟早仍是会阻塞,阻塞时间太长了,引发worker再次重启。这就是所谓的
『临时』起死回生。
daemon 是否为守护进程。
pythonpath python路径。
preload_app 配成 True 可在worker 进程fork前加载代码,推荐一试。
讲完了gunicorn的配置,再讲讲guicorn的
部署吧!
启动gunicorn
举例html
/home/venv/bin/python /home/venv/bin/gunicorn -c start_gunicorn.py wsgi:app
其中 -c 指定配置文件python
wsgi.py文件中写web 应用程序,请注意下wsgi文件的路径。nginx
博主不太懂的地方,在于奇怪的冒号。冒号左边的部分表示定义程序的包或者模块,冒号右边的部分表示包中程序实例的名字
[2]
题外话
web后端 最最简单粗暴的理解:拿到请求,查查数据库,扔回给客户端 (博主遁走
观点
1. guicorn = WSGI服务器 + http服务器。
2. 对django来说,它是一个更好的WSGI服务器(
能起多个worker 等),另外 它还能处理http请求。
参考
[2] http://www.jianshu.com/p/7bc34e56fa39
若是讲的不许,
欢迎拍砖
;)
2016年5月5号