关于WSGI和ASGI
WSGI、ASGI是一种协议规范,也是一种Web服务器与后端应用之间的交流方式。同类型的东西我们能想到CGI公共网关接口Common Gateway Interface/CGI,CGI是Web服务器运行时外部程序的规范,按CGI编写的程序可以扩展服务器功能、与浏览器进行交互、通过数据API与数据库服务器通信。本文地址:http://www.04007.cn/article/966.html,未经许可,不得转载.
WSGI、ASGI则都是Python为了解决Web服务器端与客户端之间的通信问题而产生的,是为Python语言定义的Web服务器和Web应用程序或框架之间的通用协议。并且WSGI(Python Web Server Gateway Interface,WSGI)是参考现存的CGI标准设计,
ASGI呢?ASGI异步网关协议接口,目前的WSGI主要是针对HTTP风格的请求响应模型做的设计,但越来越多的新型协议逐渐成为Web标准之一,如WebSocket(WSGI不支持WebSocket)。而ASGI正是为了解决Python常用的WSGI不支持Web开发中一些新协议而进行扩展后的版本。ASGI能处理多种通用的协议类型,包括HTTP,HTTP2和WebSocket。本文地址:http://www.04007.cn/article/966.html,未经许可,不得转载.
与语言相关联起来理解,WSGI、ASGI就和java里的servlet、PHP里面的fastCgi规范类似,FastCGI则是CGI的升级版本。python中的协议定义了执行一个python模块中的方法,php中则是执行一个php程序文件,java里面则是执行java程序中的main方法。
总之:WSGI和ASGI都是和CGI类似的python方面服务器与应用之间的协议规范,而ASGI是WSGI的扩展版本。,本文地址:http://www.04007.cn/article/966.html,未经许可,不得转载.
关于uvicorn和Gunicorn本文地址:http://www.04007.cn/article/966.html,未经许可,不得转载.
uvicorn:Uvicorn is a lightning-fast ASGI server implementation, using uvloop and httptools. Uvicorn就是一个ASGI服务器,负责从客户端接收请求,将request转发给application,将application返回的response返回给客户端,我们向uvicorn发送请求,uvicorn解析请求并转发给python程序的app处理请求,并将处理结果返回。可以认为和apache、nginx类似的东西,接收请求转发给后端的php程序处理。
Gunicorn:A Python WSGI HTTP Server for UNIX,You can use Gunicorn to manage Uvicorn and run multiple of these concurrent processes.That way, you get the best of concurrency and parallelism.Gunicorn也是一个WSGI http服务器,可以使用Gunicorn去管理Uvicorn以得到更好的并发性能。本文地址:http://www.04007.cn/article/966.html,未经许可,不得转载.
之所有关注这个区别,是因为我在一个python服务端使用了tiangolo/uvicorn-gunicorn-fastapi镜像,里面同时使用了uvicorn和gunicorn,本身使用uvicorn就可以启动web应用,并且可以通过--workers INTEGER (Number of worker processes)启动多个python进程,为什么还需要gunicorn来加一层?只能理解uvicorn 的--workers并不能较大提升并发性能了。本文地址:http://www.04007.cn/article/966.html,未经许可,不得转载.
至于为什么,不完全确定,官方对uvicorn的定义:Rack HTTP server for fast clients and Unix,查了一下Rack是什么?Rack是使用Ruby开发web应用提供了一个最小的模块化和可修改的接口,用可能最简单的方式来包装HTTP请求和响应,它为web 服务器,web框架和中间件的API进行了统一并提纯到了单一的方法调用。也许uvicorn是一个极简的服务,只是为了能启动python程序的web服务,但性能上并没有太多追求,包括--workers 多进程 ,Uvicorn只是提供了一个轻量级的方法来运行多个工作进程,但没有提供进程的监控。而Gunicorn则是功能较齐全的服务器,Uvicorn内部包含Gunicorn的workers 类,允许运行ASGI应用程序且继承了Uvicorn高性能的特点,所以使用Guicorn来进行Uvicorn进程管理,比较合适吧。本文地址:http://www.04007.cn/article/966.html,未经许可,不得转载.
本文地址:http://www.04007.cn/article/966.html 未经许可,不得转载. 手机访问本页请扫描下方二维码:
|