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 服务器

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值