WSGI & uwsgi & wWSGI 深入介绍 及区别

什么是WSGI?
  1. WSGI是一种规范,它定义了使用python编写的web app(django)与web server(uWSGI)之间接口格式,实现web app与web server间的解耦能够对接起来。

  2. WSGI 没有官方的实现, 因为WSGI更像一个协议. 只要遵照这些协议,WSGI应用(Application)都可以在任何服务器(Server)上运行

  3. WSGI实质:WSGI是一种描述web服务器(如nginx,uWSGI等服务器)如何与web应用程序(如用Django、Flask框架写的程序)通信的规范、协议。

  • WSGI server负责从客户端接收请求,将request转发给application,将application返回的response返回给客户端; WSGI application接收由server转发的request,处理请求,并将处理结果返回给server。

  • application中可以包括多个栈式的中间件(middlewares),这些中间件需要同时实现server与application,因此可以在WSGI服务器与WSGI应用之间起调节作用:对服务器来说,中间件扮演应用程序,对应用程序来说,中间件扮演服务器。

  • 为什么需要web协议:

  1. 不同的框架有不同的开发方式,但是无论如何,开发出的应用程序都要和服务器程序配合,才能为用户提供服务。

  2. 这样,服务器程序就需要为不同的框架提供不同的支持,只有支持它的服务器才能被开发出的应用使用,显然这是不可行的。

  3. web协议本质:就是定义了Web服务器和Web应用程序或框架之间的一种简单而通用的接口规范。

  • Web协议介绍
    Web协议出现顺序: CGI -> FCGI -> WSGI -> uwsgi
  1. CGI: 最早的协议

  2. FCGI: 比CGI快

  3. WSGI: Python专用的协议

  4. uwsgi: 比FCGI和WSGI都快,是uWSGI项目自有的协议,主要特征是采用二进制来存储数据,
    之前的协议都是使用字符串,所以在存储空间和解析速度上,都优于字符串型协议.

作用

在Web部署的方案上,有一个方案是目前应用最广泛的:

  • 首先,部署一个Web服务器专门用来处理HTTP协议层面相关的事情,比如如何在一个物理机上提供多个不同的Web服务(单IP多域名,单IP多端口等)这种事情。
  • 然后,部署一个用各种语言编写(Java, PHP, Python, Ruby等)的应用程序,这个应用程序会从Web服务器上接收客户端的请求,处理完成后,再返回响应给Web服务器,最后由Web服务器返回给客户端。
WSGI如何工作

从上文可以知道,WSGI相当于是Web服务器和Python应用程序之间的桥梁。那么这个桥梁是如何工作的呢?首先,我们明确桥梁的作用,WSGI存在的目的有两个:

  • 让Web服务器知道如何调用Python应用程序,并且把用户的请求告诉应用程序。
  • 让Python应用程序知道用户的具体请求是什么,以及如何返回结果给Web服务器。
WSGI中的角色

在WSGI中定义了两个角色,Web服务器端称为server或者gateway,应用程序端称为application或者framework(因为WSGI的应用程序端的规范一般都是由具体的框架来实现的)。我们下面统一使用server和application这两个术语。

  • server
  • application

server负责从客户端接收请求,将request转发给application,将application返回的response返回给客户端;

application接收由server转发的request,处理请求,并将处理结果返回给server。

application中可以包括多个栈式的中间件(middlewares),这些中间件需要同时实现server与application,因此可以在WSGI服务器与WSGI应用之间起调节作用:对服务器来说,中间件扮演应用程序,对应用程序来说,中间件扮演服务器。




介绍 uWSGI
  1. 什么是uWSGI: uWSGI是一个全功能的HTTP服务器,实现了WSGI协议、uwsgi协议、http协议等。

  2. uWSGI作用:它要做的就是把HTTP协议转化成语言支持的网络协议,比如把HTTP协议转化成WSGI协议,让Python可以直接使用。

  3. uWSGI特点:轻量级,易部署,性能比nginx差很多

注:
如果架构是Nginx+uWSGI+APP,uWSGI是一个中间件
如果架构是uWSGI+APP,uWSGI是一个服务器


什么是uwsgi

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

作用
  • 进行协议之间进行转换
  • 与Python application进行通信
基本命令
  • 启动
    uwsgi–ini 配置文件路径
  • 停止
    uwsgi–stop uwsgi.pid路径
uWSGI在django下的配置
  • settings.py下
    DEBUG=FALSE
    ALLOWED_HOSTS=["*"]

  • uwsgi.ini下

[uwsgi]
# 使用nginx连接时使用
socket=ip:port
# 直接作为web服务器使用
# http=ip:port
# 项目目录
chdir=项目目录
# 项目中wsgi.py文件的目录,相对于项目目录
wsgi-file=项目名/wsgi.py
processes=4
threads=2
master=True
# 保存启动之后主进程的pid
pidfile=uwsgi.pid
# 设置uwsgi后台运行,uwsgi.log保存日志信息
daemonize=uwsgi.log
virtualenv=虚拟环境目录

uwsgi在Nginx下的配置
server {
	listen 80;
	server_name 域名;

	location / {
		# 包含uwsgi的请求参数
		include uwsgi_params;
		# 转发请求给uwsgi
		uwsgi_pass uwsgi服务器的ip:port;
	}
}

WSGI 和 uWSGI的区别
  1. uWSGI实现了WSGI的所有接口,是一个快速、自我修复、开发人员和系统管理员友好的服务器。uWSGI代码完全用C编写,效率高、性能稳定。

  2. uwsgi是一种线路协议而不是通信协议,在此常用于在uWSGI服务器与其他网络服务器的数据通信。uwsgi协议是一个uWSGI服务器自有的协议,它用于定义传输信息的类型。

为什么要使用Uwsgi
  • Django 是一个 Web 框架,框架的作用在于处理 request 和 reponse,其他的不是框架所关心的内容。所以怎么部署 Django 不是 Django 所需要关心的。

  • Django 所提供的是一个开发服务器,这个开发服务器,没有经过安全测试,而且使用的是 Python 自带的 simple HTTPServer 创建的,在安全性和效率上都是不行的

  • 而uWSGI 是一个全功能的 HTTP 服务器,他要做的就是把 HTTP 协议转化成语言支持的网络协议。比如把 HTTP 协议转化成 WSGI 协议,让 Python 可以直接使用。

  • uwsgi 是一种 uWS GI 的内部协议,使用二进制方式和其他应用程序进行通信。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值