本文主要是介绍WSGI 是什么?和nginx有什么关系?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
回顾一下,我们在用python做web开发的时候,一般基于某个web框架来开发,django或者是flask等其它框架。业务开发完成后,就要部署到某台服务器中用于提供对外的访问。
这时候你去网上一搜,他们都会告诉你需要用 gunicorn或者是uwsgi 来部署。那么gunicorn、uwsgi 又是什么玩意。
一、WSGI是一种协议
全称Web Server Gateway Interface
,WSGI
是一种规范,用来描述web server
如何与web application
通信的规范。
二、gunicorn和uWSGI是实现了WSGI协议的web服务器
(1)uWSGI:是一个全功能的HTTP服务器,实现了WSGI协议、uwsgi协议、http协议等。
(2)用于接受http请求并转换为WSGI协议,以供实现了WSGI协议的flask使用,并且gunicorn得益于gevent等技术,大幅度提高了性能,在生产环境以替代框架自带的WSGI server。
(3)tornado之类的框架只支持单核,gunicorn可以提供多进程支持,提升多核服务器的处理性能。
三、Nginx也是一种web服务器,但功能和gunicorn/uWSGI有些差别
(1)nginx没有实现WSGI协议,如果是nginx+flask的组合的话就必须使用框架自带的WSGI server,性能渣。
(2)静态文件支持,经过配置之后,nginx可以直接处理静态文件请求而不用经过应用服务器,避免占用宝贵的运算资源;还能缓存静态资源,使访问静态资源的速度提高。
(3) 抗并发压力。可以吸收一些瞬时的高并发请求,让nginx先保持住连接(缓存http请求),然后后端慢慢消化。如果让Gunicorn直接提供服务,浏览器发起一个请求,鉴于浏览器和网络情况都是未知的,http请求的发起过程可能比较慢,而Gunicorn只能等待请求发起完成后,才去真正处理请求,处理完成后,等客户端完全接收请求后,才继续下一个。
(4)HTTP 请求缓存头处理得也比 gunicorn和uWSGI 完善。
(5)多台服务器时,可以提供负载均衡和反向代理。
下图的uwsgi或者gunicorn扮演的角色就是web服务器的角色,这里的服务器是软件层面的服务器,用于处理浏览器发过来的HTTP请求以及将响应结果返回给前端。
而Web框架的主要任务就是处理业务逻辑生成结果返回给web服务器,再由web服务器返回给浏览器。
这篇关于WSGI 是什么?和nginx有什么关系?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!