WSGI你不知道的事

wsgi是什么?

是一个协议,定义了一套接口,实现服务器端和应用端的通信的规范化,使web底层和application解耦。就如下图:
WSGI协议

wsgi主要有两个工作:

1.和服务端的交互:从底层解析http协议,然后调用应用程序提供的环境信息(host、post、进程模式等)和回调函数(这个回调函数就是将app设置的http header、status等信息传递给服务端)。
2.和app的交互:即上面的回调函数所做的内容,将app设置的http header、status等信息生成返回的header、body、status等,返回给服务端。

wsgi server是什么?

是自己写web server,使用wsgi协议来调用application。
换言之,nginx无法直接和flask 的application通信,需要借用wsgi server。而gunicorn就是这样的 wsgi server。当然flask本身也有个wsgi 服务器是werkzeug,当然性能都不好,自带的web server 更多的是测试用途, 线上发布时,则使用高性能的 wsgi server或者是联合nginx做uwsgi 。
在这里插入图片描述

WSGI的优点

由于WSGI的解耦特性,理论上,任何一个符合WSGI规范的App都可以部署在任何一个实现了WSGI规范的Server上,这给Python Web应用的部署带来了极大的灵活性。
例如,可以重写环境变量,根据目标URL,将请求消息路由到不同的app上,就像实现nginx 转发一样,可以把阻塞高的转给tornado的app做。

gunicorn介绍

工作模式 master worker

在这里插入图片描述
1.很像nginx模式,预先启动多个进程,并且监听在同一个端口上,至于如何调度,就要靠linux内核去抢了
2.有一个中心主控的master进程,管理一组worker进程,所有的请求和响应完全由worker进程来处理。
master进程负责的动态管理已经启动的进程,比如动态添加减少进程。
查看源码,就是一个简单的循环,用来不断侦听不同进程信号并作出不同的动作,仅此而已。它通过一些信号,诸如TTIN, TTOU, 和CHLD等等, 管理着那些正在运行的worker进程。
TTIN 和 TTOU信号是告诉主控master进程增加或减少正在运行的worker数量。
CHLD信号是在一个子进程已经中止之后,由主控master进程重启这个失效的worker进程。

默认是select方式、长连接

参考链接:
master-worker:http://xiaorui.cc/archives/1735

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值