WSGI和ASGI的异同

2024-02-08 11:38
文章标签 异同 asgi wsgi

本文主要是介绍WSGI和ASGI的异同,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

WSGI和ASGI,都是基于Python设计的网关接口(Gateway Interface,GI)

WSGI是基于http协议模式开发的,不支持websocket,而ASGI的诞生解决了python中的WSGI不仅支持当前的web开发中的一些新的协议标准,同时ASGI支持原有模式和Websocket的扩展,即ASGI是WSGI的扩展。

网关接口(Gateway Interface,GI)

网关接口是一种为了实现加载动态脚本而运行在Web服务器和Web应用程序中的通信接口,也可以理解为一种协议规范。只有Web应用程序都实现了网关接口规范后,双方的通信才能顺利完成。常见的网关接口协议:CGI、FASTAPI、WSGI、ASGI。
在这里插入图片描述

CGI(Common Gateway Interface)

公共网关接口(Common Gateway Interface,CGI)或通用网关接口,是最早的Web服务器主机提供的信息服务器的标准接口规范。只要实现了CGI协议,Web服务器就能获取并了解客户端提交的信息,转交给服务器端的Web应用程序进行处理,最后返回结果给客户端。定义客户端与Web服务器的交流方式的一个程序,例如正常情况下客户端发送过来一个请求,根据HTTP协议Web服务器将请求的内容解析出来,经过处理后,再将返回的内容封装好。例如服务器返回一个HTML页面,并且根据HTTP协议构建返回内容的响应格式,涉及到TCP连接、HTTP原始请求和相应格式都是由一个软件来完成,这个程序就是CGI。
在这里插入图片描述

FASTCGI(Fast Common Gateway Interface/FastCGI)

CGI程序是一种实现CGI协议的程序,快速通用网关接口(Fast Common Gateway Interface/FastCGI)是一种让Web应用程序与Web服务器通信的协议。FastCGI是公共网关接口(CGI)的增强版。

Web服务器

Web服务器(Web Server)是一种运行于网站后台(物理服务器)的软件。Web服务器主要是用于提供网页浏览或文件下载服务,它可以向浏览器等Web客户端提供HTML网页文档,也可以提供其他类型的展示文档,让客户端用户浏览;还可以提供数据文件下载等。目前世界上主流的Web服务器有Nginx,Apache,IIS,Tomcat。

Web应用程序

Web应用程序是一种能完成Web业务逻辑,能让用户基于Web浏览器访问应用程序,它可以是一个实现HTTP请求和响应功能的函数或者类,也可以是Django,Flash,sanic等这样的Web框架,当然也可以是其他语言的Web程序或Web框架。

Web服务器和Web应用程序的区别

Web应用程序主要是完成Web应用的业务逻辑的处理,Web服务器则主要是应对外部请求的接收,响应和转发。需要使用Web服务器启动运行,Web应用程序才能被用户访问到。

WSGI(Python Web Server Gateway Interface)

WSGI

Web服务器网关接口,是Python为了解决Web服务器与客户端之间的通信基于CGI标准而设计的。实现WSGI协议的服务器有uWSGI、uvicorn、gunicorn。
在这里插入图片描述
Web服务器网关接口,是为了Python语言定义的Web服务器和Web应用程序或框架之间的通用接口。WSGI就是基于Python的以CGI为标准做一些扩展。
在这里插入图片描述

uWSGI是一个快速的、自我驱动的、对开发这和系统管理员非常友好的容器服务器,完全由C语言编写,实现WSGI协议、uwsgi、http等协议。uwsgi协议是一个uWSGI服务器自有的协议,用于定义传输信息的类型,常用于uWSGI服务器与其他网络服务器的数据通信中。

WSGI区分为两部分,一种为服务器或网关,另一种为应用程序或应用框架,所谓的WSGI中间件同时实现了API的两方,即在WSGI服务器和WSGI应用之间起调解作用:从WSGI服务器的角度来说,中间件扮演应用程序,而从应用程序角度来说,中间件扮演服务器。中间件具有的功能有:

  • 重写环境变量后,根据目标URL,将请求消息路由到不同的应用对象
  • 允许在一个进程中同时运行多个应用程序或应用框架
  • 负载均衡和远程处理,通过在网络上转发请求和相应消息
  • 进行内容处理

WSGI存在的问题

  • 随着移动网络的发展,Web技术也在升级,比如Websocket、HTTP/2,HTTP/3。
  • WSGI 应用是一个单调用、同步接口,即输入一个请求,返回一个响应;这个模式无法支持长连接或者Websocket这样的连接。
  • 即使想办法将WSGI应用改成异步,还有另一个限制:一个URL对应一个请求,而HTTP/2、Websocket等在一个URL里会出现多个请求。

ASGI(Asynchronous Server Gateway Interface)

ASGI的背景

  • 在Python3.5+增加async/await特性之后,异步编程变得异常火爆。
  • Python缺乏用于asyncio框架最低限度的低级服务器/应用程序接口。
  • ASGI协议规范能够构建可在所有异步框架中使用的通用工具集。

ASGI

  • 异步服务器网关接口(Asynchronous Server Gateway Interface,ASGI)是构建于WSGI接口规范之上的异步服务器网关接口,是WSGI的延伸和扩展。
  • ASGI 尝试保持在一个简单的应用接口的前提下,提供允许数据能够在任意时候、被任意应用进程发送和接受的抽象。兼容HTTP请求响应以及Websocket数据帧序列格式,允许这些协议能通过网络或本地socket进行传输,以及让不同的协议被分配到不同的进行进行处理。
  • ASGI是WSGI的继承者,旨在提供支持异步的Python Web服务器、框架和应用程序之间的标准接口。
  • ASGI为异步和同步应用程序提供了一个标准,继续称为Web服务器、框架和应用程序(如异步Python中的WSGI)之间的标准兼容性。
    在这里插入图片描述

WSGI和ASGI简单总结

  • WSGI和ASGI,都是基于Python设计的网关接口(Gateway Interface,GI)。
  • WSGI是基于http协议模式开发的,为同步应用程序提供标准,不支持Websocket。
  • ASGI是为异步、同步应用程序提供标准,支持WSGI不支持当前Web开发中的一些新的协议标准。
  • ASGI支持原有模式和Websocket的扩展,即ASGI是WSGI的扩展。

在这里插入图片描述

参考资料
WSGI与ASGI的区别与联系
WSGI&ASGI
WSGI和ASGI
WSGI和ASGI
Python - WSGI 和 ASGI 服务器
Python - WSGI 和 ASGI 服务器

这篇关于WSGI和ASGI的异同的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/690908

相关文章

bash脚本2_对比多个不同版本同名文件的异同

bash脚本2_对比多个不同版本同名文件的异同 #!/bin/bashFOLDER_A="$1"FOLDER_B="$2"IGNORE_STRING="loc_timestamp"subfolders=$(ls -d "$FOLDER_A"/*/)for subfolderA in $subfolders; dosubfolder_name=$(basename "$subfol

Mybatis与Hibernate的异同

以前没怎么用过mybatis,只知道与hibernate一样是个orm数据库框架。随着使用熟练度的增加,发现它与hibernate区别是非常大的,结合至今为止的经验,总结出以下几点: 1. hibernate是全自动,而mybatis是半自动。 hibernate完全可以通过对象关系模型实现对数据库的操作,拥有完整的JavaBean对象与数据库的映射结构来自动生成sql。而mybatis

Android canvas save restore saveLayer的异同点

一、基础操作 drawText、drawRect、drawColor等 对于这些基础操作,相信每一个安卓开发者都能说上个一二点出来,这些就不多做介绍,api 工程师必备技能之一。 在进阶之前,先回答这个问题:    问:canvas既然大家都理解为画布,那如果先在画布上绘制了某些内容,然后再canvas.rotate旋转了画布,为什么这些已经绘制在画布上的内容不会跟随着旋转?    答:由此可

模型“鲁棒性”是什么,和“泛化性”有什么异同。

文章目录 1.范例2. 鲁棒性包含哪些内容2.1. 对噪声的鲁棒性2.2. 对不同分辨率或缩放的鲁棒性2.3. 对图像压缩的鲁棒性2.4. 对光照变化的鲁棒性2.5. 对姿态和视角变化的鲁棒性2.6. 对领域迁移的鲁棒性2.7. 对对抗样本的鲁棒性2.8. 对丢失数据或不完整数据的鲁棒性2.9. 对时序数据的鲁棒性 3.鲁棒性和泛化性的关系3.1.泛化性(Generalization)3.2

python并行计算之pool.apply_async()与pool.imap()的异同点

目录 1. 框架和技术概要: 🎨🖥️2. 相似点: 🧩💡3. 不同点: 📊👣4. 使用示例: 😊👨‍💻5. 总结: 🎉 1. 框架和技术概要: 🎨🖥️ multiprocessing 模块中的 pool.apply_async() 与 pool.imap() 都用于并行处理,但它们在使用方式和返回结果上有所不同。 2. 相似点: 🧩💡 并行处理

Promise中使用reject和throw Error的异同点

在JavaScript的异步编程中,Promise 是一个非常重要的概念。它代表了异步操作的最终完成(或失败)及其结果值。在这篇文章中,我们将探讨Promise的几种状态,以及reject和throw Error的异同,最后讨论在Promise中使用reject后代码的执行情况。 1. Promise的几种状态 Promise 对象有三种状态,分别是: Pending(进行中):这是初始状态

简述线性表、栈和队列的异同

相同点 线性表、栈和队列都是线性结构(即数据元素之间存在一对一的线性关系),其中栈和队列又是特殊的线性表。 栈和队列是操作位置受限的线性表,即对插入和删除的位置加以限制。 ​​​​不同点 (操作位置的限制) 线性表允许在表中的任意合法位置进行插入和删除操作,没有位置限制。 栈仅允许在表的一端(栈顶)进行插入(入栈)和删除(出栈)操作,因而是后进先出表。 队列仅允许在表的一端(队

SQL中的DISTINCT和GROUP BY异同

在SQL中,DISTINCT和GROUP BY都是非常重要的关键字,它们各自有着独特的用途和应用场景。尽管两者在一定程度上都可以帮助我们处理重复的数据,但它们的目的、用法以及适用场景都有所不同。下面我们将深入探讨这两个关键字的异同点。 1. 概念理解 1.1 DISTINCT DISTINCT关键字用于从查询结果中去除重复的行,只保留唯一的记录。它通常用于SELECT语句中,紧接在SELEC

docker export和save的异同

Docker是如何工作的(简单说明) Docker是基于镜像的。镜像类似于已经包含了文件、配置和安装好的程序的虚拟机镜像。同样的,你可以像启动虚拟机一样启动多个镜像实例。运行中的镜像称为容器。你可以修改容器(比如删除一个文件),但这些修改不会影响到镜像。不过,你使用docker commit <container-id> <image-name>命令可以把一个正在运行的容器变成一个新的镜像。

char s[]和char*s的异同

最近的项目中有不少c的程序,在与项目新成员的交流中发现,普遍对于char *s1 和 char s2[] 认识有误区(认为无区别),导致有时出现“难以理解”的错误。一时也不能说得很明白,网上也搜了一下相关文章发现一些写的比较好的,综合了一下当教育资料备用。 http://duanhengbin.iteye.com/blog/1706635 char *s1 = "hello";char s2[