cgi、wsgi、uwsgi 与 uWSGI

  • CGI(Common Gateway Inteface)
    • 是外部应用程序与Web服务器之间的接口标准(通用网关接口)
    用来规定一个程序该如何与web服务器程序之间通信从而可以让这个程序跑在web服务器上。当然,CGI 只是一个很基本的协议,在现代常见的服务器结构中基本已经没有了它的身影,更多的则是它的扩展和更新。
    
    • linux下python比较常见的服务端结构:
    假设我们使用 python 的 Django 框架写了一个网站,现在要将它挂在网上运行,我们一般需要:
    
    1.nginx 做为代理服务器:负责静态资源发送(js、css、图片等)、动态请求转发以及结果的回复;
    
    2.uWSGI 做为后端服务器:负责接收 nginx 请求转发并处理后发给 Django 应用以及接收 Django 应用返回信息转发给 nginx;
    
    3.Django 应用收到请求后处理数据并渲染相应的返回页面给 uWSGI 服务器。
    
    • 网站项目结构图

    • FastCGI:
      • CGI的一个扩展, 提升了性能,废除了 CGI fork-and-execute (来一个请求 fork 一个新进程处理,处理完再把进程 kill 掉)的工作方式,转而使用一种长生存期的方法,减少了进程消耗,提升了性能。
      • 这里 FastCGI 就应用于前端 server(nginx)与后端 server(uWSGI)的通信中,制定规范等等,让前后端服务器可以顺利理解双方都在说什么(当然 uWSGI 本身并不用 FastCGI, 它有另外的协议)
  • WSGI(Python Web Server GateWay Interface)

    • WSGI 的官方定义是,the Python Web Server Gateway Interface。从名字就可以看出来,这东西是一个Gateway,也就是网关。网关的作用就是在协议之间进行转换。
    • WSGI 是为 Python 语言定义的 Web 服务器和 Web 应用程序或框架之间的一种简单而通用的接口。也可以认为WSGI是一种通信协议。自从 WSGI 被开发出来以后,许多其它语言中也出现了类似接口。
    • WSGI是Web 服务器(uWSGI)与 Web 应用程序或应用框架(Django)之间的一种低级别的接口,以提升可移植 Web 应用开发的共同点。WSGI 是基于现存的 CGI 标准而设计的。
    它是用在 python web 框架编写的应用程序与后端服务器之间的规范(本例就是 Django 和 uWSGI 之间),让你写的应用程序可以与后端服务器顺利通信。在 WSGI 出现之前你不得不专门为某个后端服务器而写特定的 API,并且无法更换后端服务器,而 WSGI 就是一种统一规范, 所有使用 WSGI 的服务器都可以运行使用 WSGI 规范的 web 框架,反之亦然。
    
  • uWSGI:
    • uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。用于接收前端服务器转发的动态请求并处理后发给 web 应用程序。Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换。
  • uwsgi:
    • uwsgi是服务器和服务端应用程序的一种协议,规定了怎么把请求转发给应用程序和返回; uwsgi是一种线路协议而不是通信协议,在此常用于在uWSGI服务器与其他网络服务器的数据通信。
  • 简单来讲,这些名词的关系就是下图:

posted @ 2019-07-02 10:48  Yeokrin  阅读(379)  评论(0编辑  收藏  举报