22 CGI、FastCGI、WSGI、uWSGI、uwsgi关系

156次阅读
没有评论

共计 1851 个字符,预计需要花费 5 分钟才能阅读完成。

引入

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 的升级版

22 CGI、FastCGI、WSGI、uWSGI、uwsgi 关系


三.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 自有的一个协议

22 CGI、FastCGI、WSGI、uWSGI、uwsgi 关系


七. 区分 WSGI、uwsgi、uWSGI

  • WSGI 是一种通信协议
  • uwsgi 是 uWSGI 自有的一种线路协议,常用于在 uWSGI 服务器与其他网络服务器的数据通信
  • 而 uWSGI 是实现了 uwsgi 和 WSGI 两种协议的 Web 服务器

22 CGI、FastCGI、WSGI、uWSGI、uwsgi 关系

正文完
 
shawn
版权声明:本站原创文章,由 shawn 2023-06-16发表,共计1851字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)