nginx,wsgi,flask之间的关系
之前看写flask 应用的一些疑问,百度上的答案解释的不错,这里记着以后可以看看
Web 服务器层
对于传统的客户端 - 服务器架构,客户端向服务器发送请求,服务器接收请求,处理请求,最后给客户端返回请求的响应,即简单来说,一个服务器的作用是:
接收请求
处理请求
返回响应
此文我们探讨web服务器,常见的web服务器有Nginx,Apache等。在这个三层结构中,web 服务器是最先接收到用户的请求的。
Web框架层
常见的web框架有Flask,Django等,我们以Flask框架为例子,展示web框架的作用:
from flask import Flask
app = Flask(__name__) @app.route('/')
def hello_world():
return 'Hello World!' if __name__ == '__main__':
app.run()123456789 以上简单的几行代码,就创建了一个web应用程序对象app。
Web框架为我们提供路由管理,cookies管理等功能,让我们只需要关心业务的逻辑,提高开发的效率。
WSGI层
WSGI不是服务器,也不是用于与程序交互的API,更新不真实的代码,而只是一种接口。它只适用于Python语言,其全称为Web Server Gateway Interface,定义了web服务器和web应用之间的接口规范。也就是说,只要web服务器和web应用都遵守WSGI协议,那么web服务器和web应用就可以随意的组合。
def application(env, start_response):
start_response('200 OK', [('Content-Type', 'text/html')])
return [b"Hello World"]123 代码中的env,start_response变量由web服务器传入,其中,env是一个字典,包含了类似HTTP_HOST,HOST_USER_AGENT,SERVER_PROTOCO等环境变量。start_response则是方法,接受两个参数,分别是status,response_headers。application方法设置http响应的状态码和Content-Type等头部信息,并返回响应具体结果。
上述代码就是一个完整的WSGI应用,当一个支持WSGI的web服务器(例如Nginx)接收到客户端的请求后,便会调用这个application方法。WSGI层并不需要关心env,start_response这两个变量是如何实现的,直接使用即可。
值得指出的是,WSGI是一种协议,需要区分几个相近的名词:
- uwsgi
同wsgi一样也是一种协议,uWSGI服务器正是使用了uwsgi协议
- uWSGI
实现了uwsgi和WSGI两种协议的web服务器。注意uWSGI本质上也是一种web服务器,处于上面描述的三层结构中的web服务器层。
- CGI
通用网关接口,并不限于python语言,定义了web服务器是如何向客户端提供动态的内容。例如,规定了客户端如何将参数传递给web服务器,web服务器如何将参数传递给web应用,web应用如何将它的输出如何发送给客户端,等等。
生产环境下的web应用都不使用CGI了,CGI进程(类似Python解释器)针对每个请求创建,用完就抛弃,效率低下。WSGI正是为了替代CGI而出现的。
说到这,我们基本理清了WSGI在web服务器与web框架之间作用:WSGI就像一条纽带,将web服务器与web框架连接起来。回到本文的题目,Nginx属于一种web服务器,Flask属于一种web框架,因此,WSGI与Nginx、Flask的作用就不明而喻了。
最后以Nginx,WSGI,Flask之间的对话结束本文。
Nginx:Hey,WSGI,我刚收到了一个请求,我需要你作些准备,然后由Flask来处理这个请求。
WSGI:OK,Nginx。我会设置好环境变量,然后将这个请求传递给Flask处理。
Flask:Thanks WSGI!给我一些时间,我将会把请求的响应返回给你。
WSGI:Alright,那我等你。
Flask:Okay,我完成了,这里是请求的响应结果,请求把结果传递给Nginx。
WSGI:Good job!Nginx,这里是响应结果,已经按照要求给你传递回来了。
Nginx:Cool,我收到了,我把响应结果返回给客户端。大家合作愉快~
nginx,wsgi,flask之间的关系的更多相关文章
- 如何理解Nginx, WSGI, Flask之间的关系
概览 之前对 Nginx,WSGI(或者 uWSGI,uwsgi),Flask(或者 Django),这几者的关系一存存在疑惑.通过查阅了些资料,总算把它们的关系理清了. 总括来说,客户端从发送一个 ...
- 如何理解Nginx, WSGI, Flask(Django)之间的关系
如何理解Nginx, WSGI, Flask(Django)之间的关系 值得指出的是,WSGI 是一种协议,需要区分几个相近的名词: uwsgi 同 wsgi 一样也是一种协议,uWSGI服务器正是使 ...
- uWSGI、uwsgi、WSGI、之间的关系,为什么要用nginx加uWSGI部署。
WSGI 协议 WSGI:是一种协议规范,起到规范参数的作用,就像告诉公路一样,规定超车靠右行,速度不低于90km/h,等.但这一切都是对双方进行沟通,比如,重庆到武汉这条高速路,这儿重庆和武汉就各为 ...
- uwsgi nginx与django之间的关系以及各自的作用
首先要明确几个概念及其作用(注意大小写的区别): WSGI uWSGI uwsgi Nginx WSGI 是一种协议,不是任何包不是任何服务器,就和 TCP 协议一样.它定义了 Web 服务器和 We ...
- nginx、fastCGI、php-fpm关系梳理(转)
前言: Linux下搭建nginx+php+memached(LPMN)的时候,nginx.conf中配需要配置fastCGI,php需要安装php-fpm扩展并启动php-fpm守护进程,nginx ...
- nginx、fastCGI、php-fpm关系梳理(转载 http://blog.sina.com.cn/s/blog_6df9fbe30102v57y.html)
前言: Linux下搭建nginx+php+memached(LPMN)的时候,nginx.conf中配需要配置fastCGI,php需要安装 php-fpm扩展并启动php-fpm守护进程, ...
- nginx、fastCGI、php-fpm关系梳理(转载参考)
nginx.fastCGI.php-fpm关系梳理 还可以参考:http://www.cnblogs.com/skynet/p/4173450.html 前言: Linux下搭建nginx+php ...
- nginx、fastCGI、php-fpm关系梳理
前言: Linux下搭建nginx+php+memached(LPMN)的时候,nginx.conf中配需要配置fastCGI,php需要安装php-fpm扩展并启动php-fpm守护进程,nginx ...
- web服务器、WSGI跟Flask(等框架)之间的关系
之前对 Nginx,WSGI(或者 uWSGI,uwsgi),Flask(或者 Django),这几者的关系一存存在疑惑.通过查阅了些资料,总算把它们的关系理清了. 总括来说,客户端从发送一个 HTT ...
随机推荐
- (ssh整合web导出excel)在ssh框架中使用poi正确导出具有比较高级固定格式的excel 整体过程,查询导出前后台下载
(一) 接需求 : 需求相关 (贴图 ) 生成三核对文件 1.新增三核对菜单页面中,增加生成三核对文件功能按钮,弹窗可根据变电站.电压等级查询定值单. 2.定值单信息以表格形式展示,根据选择 ...
- zookeeper_01:zookeeper概述
应对场景: 相对于开发在一台计算机上运行的单个程序,如何让一个应用中的多个独立的程序协同工作是一件非常困难的事情.开发这样的应用,很容易让很多开发人员陷入如何使多个程序协同工作的逻辑中,最后导致没有时 ...
- AngularJS 中的 Promise 和 设计模式
解决 Javascript 异步事件的传统方式是回调函数:调用一个方法,然后给它一个函数引用,当这个方法完结的时候执行这个函数引用. <!-- lang: js --> $.get('ap ...
- ecshop各个文件夹作用
Images文件夹: 这个文件夹下有子文件夹,在这些子文件夹下面存放着当前网站商品的原始图片和缩略图.这些子文件夹命名有规律的,它们的文件名是它们目录下商品加入 的年月份.也就是说在同一个月份加入的商 ...
- 懒省事的小明--nyoj55
懒省事的小明 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 小明很想吃果子,正好果园果子熟了.在果园里,小明已经将所有的果子打了下来,而且按果子的不同种类分成 ...
- jquery load(URL,FUNCTION(){}) 异步加载页面
$("#btnSearch").click(function () { var queryUrl = '/Report/LoadInsClassifFileNew'; if ($( ...
- Monthly Expense(二分) 分类: 二分查找 2015-06-06 00:31 10人阅读 评论(0) 收藏
Description Farmer John is an astounding accounting wizard and has realized he might run out of mone ...
- Search gold(dp)
Search gold Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Subm ...
- MS SQL 当记录不存在时插入insert INTO not exists
INSERT INTO dbo.[T_DabaoTemp] ([PType] ,[pID] ,[NewVersion] ,[ParentC ...
- 第三章:挖掘SimpleSection.o
1.查看.o目标文件用objdump 命令, 参数“-h"就是把ELF文件的各个段的基本信息打印出来.也可以使用-X打印更多的信息. 段的属性,Size是段的长度,FIle off 是段开始 ...