🍖CGI、FastCGI、WSGI、uWSGI、uwsgi关系
引入
CGI、FastCGI、WSGI、uWSGI、uwsgi是什么 ?
之间的关系?
一.CGI
- 通用网关接口(Common Gateway Interface/CGI)是外部应用程序与Web服务器之间的接口标准,用来规定一个程序该如何与web服务器程序之间通信
- CGI程序可以用任何脚本语言或者是完全独立编程语言实现,只要这个语言可以在这个系统上运行
- 用来规范web服务器传输到php解释器中的数据类型以及数据格式,包括URL、查询字符串、POST数据、HTTP header等,也就是为了保证web server传递过来的数据是标准格式的
- 总结 : CGI是一个标准,定义了客户端服务器之间如何传数据
二.fastCGI
-
快速通用网关接口 (Fast Common Gateway Interface/FastCGI) 是一种让交互程序与Web服务器通信的协议, 它是早期 CGI 的一个增强版本
-
像是一个常驻(long-live)型的CGI , 废除了 CGI fork-and-execute (来一个请求 fork 一个新进程处理, 处理完再把进程 kill 掉)的工作方式, 转而使用一种长生存期的方法, 减少了进程消耗, 从而使服务器可以同时处理更多的网页请求
-
使用fastCGI的服务器 :
- Apache HTTP Server (部分)
- Cherokee HTTP Server
- Hiawatha Webserver
- Lighttpd
- Nginx
- LiteSpeed Web Server
- Microsoft IIS
- 总结 : CGI 的升级版
三.WSGI
-
全称 Web Server Gateway Interface 或者 Python Web Server Gateway Interface
-
Web服务器网关接口, 是为 Python 语言定义的 Web 服务器和 Web 应用程序或框架之间的一种简单而通用的接口; 自从 WSGI 被开发出来以后, 许多其它语言中也出现了类似接口
-
WSGI 是作为 Web 服务器与 Web 应用程序或应用框架之间的一种低级别的接口, 以提升可移植 Web 应用开发的共同点; WSGI 是基于现存的 CGI 标准而设计的
# 例 :
Web server(web服务器:比如uWSGI) 与 Web application(web应用框架:比如django)进行交互
uwsgi协议需要将过来的请求转给django处理,那么uWSGI和django的交互和调用就需要一个统一的规范
这个规范就是WSGI(Web Server Gateway Interface)
- WSGI 的官方定义是: the Python Web Server Gateway Interface; 从名字就可以看出来,这东西是一个Gateway,也就是网关: 网关的作用就是在协议之间进行转换
- 实现WSGI协议的模块 :
1.django : wsgiref模块, 本质上就是编写一socket服务端, 用于接收用户请求
2.Flask : werkzeug、wsgi模块, 本质上就是编写一个socket服务端,用于接收用户请求
- 总结 : 为Python定义的web服务器和web框架之间的接口标准
四.wsgiref
- Python中的一个WSGI模块 : wsgiref
- 它是用纯Python编写的WSGI服务器的 ''参考实现''
- 所谓 ''参考实现'' 是指该实现完全符合WSGI标准,但是不考虑任何运行效率,仅供开发和测试使用
五.uWSGI
- uWSGI 是一个Web服务器, 它实现了WSGI、uwsgi、http等协议, 用于接收前端服务器转发的动态请求并处理后发给 web 应用程序
- 类似的web服务器
uWSGI : 用c语言写的,性能比较高
gunicorn : python写的, 在unix上被广泛使用
tornado : python写的, 异步非阻塞web服务器, 也可以部署django项目
wsgiref、werkzeug(是符合WSGI协议的web服务器+工具包(封装了一些东西))
- Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换
- 总结 : 一个Web Server, 即一个实现了WSGI的服务器, 处理发来的请求
六.uwsgi
-
它是uWSGI服务器实现的独有的线路协议, 用于定义传输信息的类型, 是用于前端服务器与 uwsgi 的通信规范
-
uwsgi和WSGI都是基于CGI扩展出来的
-
总结 : uWSGI自有的一个协议
七.区分 WSGI、uwsgi、uWSGI
- WSGI是一种通信协议
- uwsgi是uWSGI自有的一种线路协议,常用于在uWSGI服务器与其他网络服务器的数据通信
- 而uWSGI是实现了uwsgi和WSGI两种协议的Web服务器