一.概述

  • 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协议主要包括serverapplication两部分:

  • WSGI server负责从客户端接收请求,将request转发给application,将application返回的response返回给客户端;
  • WSGI application接收由server转发的request,处理请求,并将处理结果返回给serverapplication中可以包括多个栈式的中间件(middlewares),这些中间件需要同时实现server与application,因此可以在WSGI服务器与WSGI应用之间起调节作用:对服务器来说,中间件扮演应用程序,对应用程序来说,中间件扮演服务器。

WSGI协议其实是定义了一种serverapplication解耦的规范,即可以有多个实现WSGI server的服务器,也可以有多个实现WSGI application的框架,那么就可以选择任意的serverapplication组合实现自己的web应用。

例如uWSGIGunicorn都是实现了WSGI server协议的服务器,DjangoFlask是实现了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---概念相关推荐

  1. 关于 WSGI、uwsgi和uWSGI的区别及基于 uWSGI和gunicorn 部署python web 简述

    关于 WSGI.uwsgi和uWSGI的区别及基于 uWSGI和gunicorn 部署python web 简述 引言 最近基于 Flask Web框架在开发一个后端项目,在Web Server和 F ...

  2. WSGI,uWSGI,uwsgi,Nginx

    WSGI WSGI的全称是Web Server Gateway Interface(Web服务器网关接口),它不是服务器.python模块.框架.API或者任何软件,只是一种描述web服务器(如ngi ...

  3. cgi、wsgi、uwsgi 与 uWSGI

    CGI(Common Gateway Inteface) 是外部应用程序与Web服务器之间的接口标准(通用网关接口) 用来规定一个程序该如何与web服务器程序之间通信从而可以让这个程序跑在web服务器 ...

  4. WSGI、uwsgi和uWSGI

    一.WSGI WSGI ( Web Server Gateway Interface )是一个网络服务器和网络应用的通用接口的规范或者用于Python框架. 由于python开发人员在网络框架的选择限 ...

  5. linux搭建 uwsgi服务器,uwsgi服务器部署

    使用pip安装uwsgi和uwsgi pip install uwsgi pip install uwsgitop pip安装uwsgi后,Linux命令行敲击uwsgi --help后,提示uwsg ...

  6. uwsgi模式_一篇就弄懂WSGI、uwsgi和uWSGI的区别

    引言 最近基于Django Web框架在开发一个后端项目,在Web Server和Django应用程序交互的过程中总会碰到本文题目提及到的几个概念,笔者特意花了点时间研究了下,为方便以后温习特在此记录 ...

  7. python uwsgi_python nginx+uwsgi+WSGI 处理请求详解

    https://blog.csdn.net/a519640026/article/details/76157976 请求从 Nginx 到 uwsgi 到 django 交互概览 作为python w ...

  8. nginx+uWSGI+django+virtualenv+supervisor发布web服务器

    导论 WSGI是Web服务器网关接口.它是一个规范,描述了Web服务器如何与Web应用程序通信,以及Web应用程序如何链接在一起以处理一个请求,(接收请求,处理请求,响应请求) 基于wsgi运行的框架 ...

  9. uwsgi+nginx部署django项目(有图原理的详细展示的)

    1. 概念解析(wsgi协议,uwsgi协议,uWSGI) 参考:https://www.cnblogs.com/wspblog/p/8575101.html 1.1 现实世界的web请求: 1.2  ...

最新文章

  1. 【高级数据结构】并查集
  2. 书籍记录——C++大学基础教程(第五版)
  3. PowerDesigner导出
  4. golang 协程 通道channel阻塞
  5. python中对切片的理解
  6. mysql中文注释语法报错_Linux系统Python配置MySQL详细教程
  7. OpenGL GLSL Shader Subroutines函数的实例
  8. Android菜鸟的成长笔记(13)——异步任务(Async Task)
  9. 【机器视觉】 close_measure算子
  10. IOS15 SVProgressHUD 报UIWindow 无法识别错误
  11. 男女之间应该保留多少隐私
  12. linux查看分区访问权限,linux查看分区是否开启acl权限
  13. 利用Python进行数据分析--数据聚合与分组运算1
  14. 系泊系统设计建模matlab程序,系泊系统设计-数学建模论文.docx
  15. php下载功能的实现,laravel实现下载文件
  16. 脑皮质算法(3)-- 新皮层的位置:利用皮层网格细胞的感觉运动物体识别理论
  17. PyTorch基础:Tensor的组合与分块
  18. Redhat8.0 安装web consol、可视化管理工具
  19. 【Android应用开发详解】第01期:第三方授权认证(一)实现第三方授权登录、分享以及获取用户资料
  20. 胃溃疡 ---- 四药同治(丽珠得乐、奥美拉唑、阿莫西林 + 克林霉素)

热门文章

  1. 绝版「游戏」保护计划!
  2. i7 11700k配什么主板
  3. Fisher判别法的MATLAB程序
  4. 好用的手机号码归属地、吉凶及号码估值查询API接口
  5. h700通话糊 索尼wi_如何评价索尼wi—h700耳机?
  6. 如何关闭苹果手机自动扣费_苹果怎么取消自动续费?分享关闭订阅的教程
  7. [YTU](3273)吃鸡之团队合作 ---- BFS
  8. 如何高效的利用CPU缓存
  9. 关于华为手机密码保险箱功能关闭
  10. 荣耀畅玩8c可以升级鸿蒙系统吗,华为鸿蒙系统支持荣耀吗 荣耀鸿蒙系统怎么升级...