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)css

    • 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服務器與其餘網絡服務器的數據通訊。
  • 簡單來說,這些名詞的關係就是下圖:前端

相關文章
相關標籤/搜索