WSGI和uwsgi和uWSGI---概念
一.概述
- WSGI是一种通信协议。
- uwsgi是一种传输协议。
- uWSGI是实现了uwsgi和WSGI两种协议的Web服务器。
二.WSGI
Python语言有多种web框架:
Django
,Flask
,Tornado
,web.py
等.我们可以基于这些web框架开发web应用基于Python语言开发的web应用需要部署在支持python的web服务上:uWSGI
,Gunicorn
,Waitress
,flup
我们可能会遇到这样的问题: 当要把一个web服务器和一个基于框架开发的web应用结合起来时,却发现他们并不兼容,例如基于Django框架开发的web应用只能部署在uWSGI
上,而无法部署在Gunicorn
上
那么如何保证基于不同的web框架开发的web应用能运行在各个web服务器上呢?
或者说如何让各个web服务器兼容基于不同的web框架开发的web应用呢?
这个时候需要WSGI协议登场
2.1 协议简介1
WSGI,全称 Web Server Gateway Interface,或者 Python Web Server Gateway Interface ,是为 Python 语言定义的 Web 服务器和 Web 应用程序或框架之间的一种简单而通用的接口。自从 WSGI 被开发出来以后,许多其它语言中也出现了类似接口: java有Servlet API,Ruby 有 Rack。
WSGI 是作为 Web 服务器与 Web 应用程序或应用框架之间的一种低级别的接口,以提升可移植 Web 应用开发的共同点。WSGI 是基于现存的 CGI 标准而设计的
WSGI协议允许开发者可以混合匹配web服务器和web框架,选择一个适合的配对。比如,可以在Gunicorn 或 Nginx/uWSGI 或 Waitress等web服务器上运行 基于Django, Flask等开发的web应用
web服务器必须具备WSGI接口,所有的现代Python Web框架都已具备WSGI接口
它让你不对代码作修改就能使服务器和特点的web框架协同工作。
也就是说web框架和web服务器都必须实现WSGI接口
2.2 协议简介2
WSGI
协议主要包括server
和application
两部分:
WSGI server
负责从客户端接收请求,将request
转发给application
,将application
返回的response
返回给客户端;WSGI application
接收由server
转发的request
,处理请求,并将处理结果返回给server
。application
中可以包括多个栈式的中间件(middlewares
),这些中间件需要同时实现server与application,因此可以在WSGI服务器与WSGI应用之间起调节作用:对服务器来说,中间件扮演应用程序,对应用程序来说,中间件扮演服务器。
WSGI
协议其实是定义了一种server
与application
解耦的规范,即可以有多个实现WSGI server
的服务器,也可以有多个实现WSGI application
的框架,那么就可以选择任意的server
和application
组合实现自己的web
应用。
例如uWSGI
和Gunicorn
都是实现了WSGI server
协议的服务器,Django
,Flask
是实现了WSGI application
协议的web
框架,可以根据项目实际情况搭配使用。
wsgi server (比如uWSGI)实现wsgi协议规范的服务器我们叫做wsgi服务器,也就是uWSGI服务器
wsgi application(比如django )实现wsgi协议的应用,我们叫做wsgi应用,比如Django,Falsk
WSGI server相当于螺丝,WSGI application相当于螺母,只有实现了标准的服务器和框架才能部署到一起
三.uwsgi
uwsgi协议(传输协议,速度很快):uWSGI服务器
实现的一个自有的协议,是uWSGI 的一种内部协议(之前的协议都是使用字符串,而采用二进制来存储和解析数据的uwsgi的速度更快)
- WSGI是一种通信协议。
- uwsgi是一种线路协议而不是通信协议,在此常用于在uWSGI服务器与其他网络服务器(Nginx)的数据通信。
Nginx(对外服务器)和uWSGI(对内服务器)之间的通信,是基于uwsgi协议进行的
四.uWSGI
概述: 是一个web服务器,类似的web服务器还有部署java web应用的tomcat
uWSGI
旨在为部署分布式集群的网络应用开发一套完整的解决方案。主要面向web
及其标准服务。由于其可扩展性,能够被无限制的扩展用来支持更多平台和语言。uWSGI
是一个web
服务器,实现了WSGI
协议,uwsgi
协议,http
协议等。
uWSGI
的主要特点是:
- 超快的性能
- 低内存占用
- 多
app
管理 - 详尽的日志功能(可以用来分析
app
的性能和瓶颈) - 高度可定制(内存大小限制,服务一定次数后重启等)
Python需要使用nginx + uWSGI 提供静态页面访问,和高并发
php 需要使用 nginx + fastcgi 提供高并发
java 需要使用 nginx + tomcat 提供 web 服务
Python标准库提供的独立WSGI服务器叫wsgiref
,Django开发环境用的就是这个模块来做服务器,
上线之后一般使用uWSGI服务器
uWSGI实现了WSGI的所有接口, uWSGI代码完全用C编写,效率高、性能稳定。
五.参考资料
根据以下博客整理:
https://www.cnblogs.com/quegai18/p/10509996.html
https://www.cnblogs.com/wcx666/p/10444400.html
https://www.cnblogs.com/biggw/p/11342109.html
https://www.cnblogs.com/big-handsome-guy/p/8664618.html
https://www.cnblogs.com/guokaifeng/p/11007359.html
https://blog.csdn.net/mnszmlcd/article/details/78819237
WSGI和uwsgi和uWSGI---概念相关推荐
- 关于 WSGI、uwsgi和uWSGI的区别及基于 uWSGI和gunicorn 部署python web 简述
关于 WSGI.uwsgi和uWSGI的区别及基于 uWSGI和gunicorn 部署python web 简述 引言 最近基于 Flask Web框架在开发一个后端项目,在Web Server和 F ...
- WSGI,uWSGI,uwsgi,Nginx
WSGI WSGI的全称是Web Server Gateway Interface(Web服务器网关接口),它不是服务器.python模块.框架.API或者任何软件,只是一种描述web服务器(如ngi ...
- cgi、wsgi、uwsgi 与 uWSGI
CGI(Common Gateway Inteface) 是外部应用程序与Web服务器之间的接口标准(通用网关接口) 用来规定一个程序该如何与web服务器程序之间通信从而可以让这个程序跑在web服务器 ...
- WSGI、uwsgi和uWSGI
一.WSGI WSGI ( Web Server Gateway Interface )是一个网络服务器和网络应用的通用接口的规范或者用于Python框架. 由于python开发人员在网络框架的选择限 ...
- linux搭建 uwsgi服务器,uwsgi服务器部署
使用pip安装uwsgi和uwsgi pip install uwsgi pip install uwsgitop pip安装uwsgi后,Linux命令行敲击uwsgi --help后,提示uwsg ...
- uwsgi模式_一篇就弄懂WSGI、uwsgi和uWSGI的区别
引言 最近基于Django Web框架在开发一个后端项目,在Web Server和Django应用程序交互的过程中总会碰到本文题目提及到的几个概念,笔者特意花了点时间研究了下,为方便以后温习特在此记录 ...
- python uwsgi_python nginx+uwsgi+WSGI 处理请求详解
https://blog.csdn.net/a519640026/article/details/76157976 请求从 Nginx 到 uwsgi 到 django 交互概览 作为python w ...
- nginx+uWSGI+django+virtualenv+supervisor发布web服务器
导论 WSGI是Web服务器网关接口.它是一个规范,描述了Web服务器如何与Web应用程序通信,以及Web应用程序如何链接在一起以处理一个请求,(接收请求,处理请求,响应请求) 基于wsgi运行的框架 ...
- uwsgi+nginx部署django项目(有图原理的详细展示的)
1. 概念解析(wsgi协议,uwsgi协议,uWSGI) 参考:https://www.cnblogs.com/wspblog/p/8575101.html 1.1 现实世界的web请求: 1.2 ...
最新文章
- 【高级数据结构】并查集
- 书籍记录——C++大学基础教程(第五版)
- PowerDesigner导出
- golang 协程 通道channel阻塞
- python中对切片的理解
- mysql中文注释语法报错_Linux系统Python配置MySQL详细教程
- OpenGL GLSL Shader Subroutines函数的实例
- Android菜鸟的成长笔记(13)——异步任务(Async Task)
- 【机器视觉】 close_measure算子
- IOS15 SVProgressHUD 报UIWindow 无法识别错误
- 男女之间应该保留多少隐私
- linux查看分区访问权限,linux查看分区是否开启acl权限
- 利用Python进行数据分析--数据聚合与分组运算1
- 系泊系统设计建模matlab程序,系泊系统设计-数学建模论文.docx
- php下载功能的实现,laravel实现下载文件
- 脑皮质算法(3)-- 新皮层的位置:利用皮层网格细胞的感觉运动物体识别理论
- PyTorch基础:Tensor的组合与分块
- Redhat8.0 安装web consol、可视化管理工具
- 【Android应用开发详解】第01期:第三方授权认证(一)实现第三方授权登录、分享以及获取用户资料
- 胃溃疡 ---- 四药同治(丽珠得乐、奥美拉唑、阿莫西林 + 克林霉素)