python web开发之WSGI/uwsgi/uWSGI详解

1. 三者的定义

  • WSGI是一种通信协议。
  • uwsgi是一种传输协议。
  • uWSGI是实现了uwsgi和WSGI两种协议的Web服务器。

2.三者的使用场景

WSGI,全称 Web Server Gateway Interface,是为 Python 语言定义的 Web 服务器和 Web 应用程序或框架之间的一种简单而通用的接口。定义了Web服务器如何与Python应用程序进行交互,使得使用Python写的Web应用程序可以和Web服务器对接起来。

server端会先收到用户的请求,然后会根据规范的要求调用application端,调用的结果会被封装成HTTP响应后再发送给客户端。

要使用WSGI,需要分别实现server角色和application角色。

WSGI协议主要包括serverapplication两部分

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

WSGI协议其实是定义了一种serverapplication解耦的规范,Application端的实现一般是由Python的各种框架来实现的,比如Django,Flask,Tornado, web.py等,一般开发者不需要关心WSGI的实现,框架会会提供接口让开发者获取HTTP请求的内容以及发送HTTP响应;

Server端的实现会比较复杂一点,这个主要是因为软件架构的原因。一般常用的Web服务器,如Apache和nginx,都不会内置WSGI的支持,而是通过扩展来完成。Nginx上一般是用proxy的方式,用nginx的协议将请求封装好,发送给应用服务器,比如uWSGI,应用服务器会实现WSGI的服务端、进程管理以及对application的调用。

以提升可移植 Web 应用开发的共同点。

例如: uWSGI和Gunicorn都是实现了WSGI server协议的服务器,Django,Flask是实现了WSGI application协议的web框架,可以根据项目实际情况搭配使用。

  • wsgi server (比如uWSGI)实现wsgi协议规范的服务器我们叫做wsgi服务器,也就是uWSGI服务器

  • wsgi application(比如django )实现wsgi协议的应用,我们叫做wsgi应用,比如Django,Falsk

uwsgi 常用于在uWSGI服务器与其他网络服务器的数据通信;是uWSGI服务器实现的一个自有的协议,即uWSGI 的一种内部协议(之前的协议都是使用字符串,而采用二进制来存储和解析数据的uwsgi的速度更快)

  • WSGI是一种通信协议。
  • uwsgi是一种线路协议而不是通信协议,在此常用于在uWSGI服务器与其他网络服务器(Nginx)的数据通信。

Nginx(对外服务器)和uWSGI(对内服务器)之间的通信,是基于uwsgi协议进行的

  

uWSGI 是一种web服务器,是实现了uwsgi,WSGI,http协议的Web服务器。(类似的web服务器还有部署java web应用的tomcat

uWSGI旨在为部署分布式集群的网络应用开发一套完整的解决方案。主要面向web及其标准服务。由于其可扩展性,能够被无限制的扩展用来支持更多平台和语言。它要做的就是把HTTP协议转化成语⾔⽀持的⽹络协议。⽐如把HTTP协议转化成WSGI协议,让Python可以直接使⽤。Nginx中HttpUwsgiModule的作⽤是与uWSGI服务器进⾏交换。

uWSGI的主要特点是:

  • 超快的性能
  • 低内存占用
  • app管理
  • 详尽的日志功能(可以用来分析app的性能和瓶颈)
  • 高度可定制(内存大小限制,服务一定次数后重启等)

为什么有了uWSGI为什么还需要nginx?因为nginx具备优秀的静态内容处理能⼒,然后将动态内容转发给uWSGI服务器,这样可以达到很好的客户端响应。

WSGI,uwsgi, uWSGI: 实现过程图解

参考链接 :

WSGI,uwsgi, uWSGI详解

https://blog.csdn.net/feyehong/article/details/102933412

部署示例:

Nginx+uWSGI+Flask服务部署_nginx flask_Hi~晴天大圣的博客-CSDN博客 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/4502.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ 中共享指针 std::make_shared 的用法

这行代码是使用 C++ 编程语言编写的。为了理解这行代码,我们需要详细了解每个组成部分。 precomputation_grid_stack_: 这是一个指向 PrecomputationGridStack2D 类型的共享指针。 std::make_shared<PrecomputationGridStack2D>: 这是一个C++库函数,用于创建一个新的…

基于微信小程序的求职招聘系统设计与实现(Java+spring boot+MySQL+微信小程序)

获取源码或者论文请私信博主 演示视频&#xff1a; 基于微信小程序的求职招聘系统设计与实现&#xff08;Javaspring bootMySQL微信小程序&#xff09; 使用技术&#xff1a; 前端&#xff1a;html css javascript jQuery ajax thymeleaf 微信小程序 后端&#xff1a;Java s…

uniapp之表单校验

在 Uniapp 中&#xff0c;可以使用 uni-validate 插件来进行表单校验。uni-validate 是一个基于 async-validator 的表单校验插件&#xff0c;可以方便地对表单进行校验&#xff0c;并提供了一些内置的校验规则。 uni-validate 进行表单校验的示例 以下是一个使用 uni-valida…

如何为SoC做ARM CPU适配——以裸核使用malloc为例

本文任务&#xff1a;为陌生的SoC平台编写基础软件&#xff0c;适配 malloc() 函数 0 如何为SoC做ARM CPU适配 今时不同往日&#xff0c;我们平时开发/娱乐接触到的消费级MCU/MPU基本山都是包含处理核与一系列外设的SoC。如果熟悉裸片开发&#xff0c;一定会在厂家提供的标准…

铁电材料极化高压放大器ATA-7025技术指标及使用说明

铁电材料是一类具有特殊电学性质的材料&#xff0c;在现代电子技术和器件中具有广泛的应用。铁电材料的极化是其重要的特征之一&#xff0c;极化测试是评估铁电材料性能的关键方法之一。一般铁电极化测试&#xff0c;是通过根据外电场施加的电压变化来观察材料产生的极化效应。…

结构型模式 - 组合模式

概述 对于这个图片肯定会非常熟悉&#xff0c;上图我们可以看做是一个文件系统&#xff0c;对于这样的结构我们称之为树形结构。在树形结构中可以通过调用某个方法来遍历整个树&#xff0c;当我们找到某个叶子节点后&#xff0c;就可以对叶子节点进行相关的操作。可以将这颗树理…

vue2项目打包遇到的问题(记录)

临时纯手工搭建开发了个vue2小项目&#xff0c;打包后出现了很多问题 一、打包后index.html打开空白 打包后整个页面空白&#xff0c;是因为打包后资源路径不对&#xff0c;需要修改config->index.js下&#xff0c;build属性中assetsPublicPath值为./ module.exports {d…

微信合并转发的图片如何批量保存

今天遇到一个场景&#xff1a;朋友给转发来了一个合并的聊天记录&#xff0c;里面是几十张图片&#xff0c;希望能打印出来。逐张保存太费手了。下面是批量保存图片的方法&#xff1a; 1、登录PC端微信&#xff1b; 2、将要保存图片的这条合并转发的聊天记录收藏&#xff1b;…

49、MyBatis 与Hibernate 有哪些不同?

MyBatis 与Hibernate 有哪些不同? 一、开发速度的对比二、开发工作量的对比三、sql优化方面四、对象管理的对比五、缓存机制对比总结 SQL 和 ORM 的争论&#xff0c;永远都不会终止 一、开发速度的对比 Hibernate的真正掌握要比Mbatis难些。Mybatis框架相对简单很容易上手&am…

Camtasia Studio 2023怎么导出mp4格式的视频的详细教程介绍

很多用户刚接触Camtasia Studio 2023&#xff0c;不熟悉如何保存mp4格式的视频。在今天的文章中小编为大家带来了Camtasia Studio 2023保存为mp4格式的视频的详细教程介绍。 Camtasia Studio 2023保存为mp4格式的视频的详细教程 1、 打开Camtasia Studio。 Camtasia Studio- …

解决appium-doctor报ffmpeg cannot be found

一、下载ffmpeg安装包 https://ffmpeg.org/download.html 找到如图所示红框位置点击下载ffmpeg安装包。 二、配置ffmpeg环境变量 三、检查ffmpeg版本信息 重新管理员打开dos系统cmd命令提示符&#xff0c;输入ffmpeg查看是否出现版本信息&#xff0c;安装完好。 ffmpeg

短视频矩阵系统源码--开发实践

短视频矩阵系统源码开发技术&#xff1a; 1. 数据采集&#xff1a;使用Python的requests库进行数据爬取&#xff0c;使用Selenium模拟浏览器操作&#xff0c;解决抖音反爬虫机制。 2. 数据处理&#xff1a;使用Python的正则表达式、BeautifulSoup等库进行数据处理。 3. 关键…

使用Python和Scrapy实现抓取网站数据

Scrapy是一个功能强大的网络爬虫框架&#xff0c;允许开发者轻松地抓取和解析网站内容&#xff0c;这篇文章主要为大家介绍了如何使用Python的Scrapy库进行网站数据抓取&#xff0c;需要的可以参考一下 在本文中&#xff0c;我们将介绍如何使用Python的Scrapy库进行网站数据抓…

selenium-多窗口和frame处理

1.切换窗口 适用场景&#xff1a;点击按钮后&#xff0c;重新打开一个窗口&#xff0c;想要在新的窗口定位操作&#xff0c;就需要切换窗口 原理&#xff1a;获取窗口的唯一标识就是句柄&#xff0c;获取到句柄&#xff0c;就可以切换到对应的窗口了 处理方法&#xff1a; …

Oracle 将表的某一列的所有值用逗号隔开,去重后合并成一行

一、背景 最近在工作中&#xff0c;有个需求是要求在oracle统计查询的时候&#xff0c;将表的某一列的所有值用逗号隔开&#xff0c;去重后合并成一行。于是研究了一下listagg和xmlagg 函数 用来合并数据 以下通过实例说明。 二、方法 1.不去重的两种方法 listagg函数 返回…

安达发|高级计划与智能排程APS软件的发展史进程

从泰勒的科学管理理论出发&#xff0c;率先追求科学的管理理论和管理工具&#xff0c;在计算机成为企业日常管理的基本工具之后&#xff0c;信息系统已经成为提高工厂管理水平的重要支柱。 在工厂计划领域&#xff0c;开始了从MRP到MRPII再到ERP的演变过程。MRPII指的是制造…

自动化测试工具比传统测试工具的优势体现在哪里?

随着软件行业的快速发展和扩张&#xff0c;自动化测试工具在提高测试效率和质量方面起到了不可或缺的作用&#xff0c;那你知道自动化测试工具比传统测试工具的优势体现在哪里吗&#xff1f; 首先&#xff0c;自动化测试工具能够大大缩短测试周期。相比于传统手动测试&#xff…

Spring AOP知识点详解

Spring AOP是 Spring最核心的能力&#xff0c;那到底什么是AOP呢&#xff0c;今天了不起带大家了解一下。 AOP是什么 AOP(Aspect Oriented Programming):面向切面编程&#xff0c;是OOP(面向对象编程)的一个延续&#xff0c;其和OOP一样&#xff0c;也是一种编程思想&#xff0…

大模型时代,腾讯云“复制”腾讯|WAIC2023

点击关注 文&#xff5c;郝鑫 编&#xff5c;刘雨琦 刚过去的WAIC&#xff08;世界人工智能大会&#xff09;俨然成为了大模型厂商的成果汇报大会。 百度文心大模型升级到3.5版本&#xff0c;训练速度提升2倍&#xff0c;推理速度提升30倍&#xff1b;华为云发布盘古大模型3…

《无畏契约》游戏分析

文章目录 介绍游戏继承性《守望先锋》游戏美术对比游戏机制对比 《CSGO》游戏美术对比游戏机制对比 《英雄联盟》游戏美术对比游戏机制对比 《无畏契约》的优点《无畏契约》的缺点该游戏值得学习之处总结 介绍 《无畏契约&#xff08;VALORANT&#xff09;》是一款由拳头游戏&…