WSGI與uWSGI的應用場景與使用方法


WSGI  /與/  uWSGI

在阿里雲上部署項目時,在通信中我們都會用到wsgi與uWSGI,這此我就帶大家來了解一下wsgi與uWSGI。

對了,上次有個朋友問我Django的生命周期是什么?我在下一篇博客中給大家講解一下。

WSGI

WSGI是Web Server Gateway Interface的縮寫。他是PythonWeb服務器網關接口,

是Python應用程序或框架和Web服務器之間的一種接口,已經被廣泛接受,

它已基本達成它的可移植性方面的目標。

其實我覺得他更像一個協議,他可以運行在任何服務器上WSGI應用(Application)都可以在任何服務器(Server)上運行, 反之亦然。

 

  CLIENT:客戶端       SERVER:服務器       APPLICATION:應用器

 

          (圖片有些模糊,可以放大看)

從這副圖中我們可以看出,應用他必須是一個可調用對象,也可以是一個函數,

也可以是一個可以實現__call__()的方法,每收到一個請求,APPLICATION(應用器)會調用應用。

應用在處理完這些數據,准備返回數據的時候,先調用服務傳給它的函數,最后再返回可迭代對象作為數據。

在上圖中,黃色到綠色之間有一個environ,他包括了請求的相關信息,

比如請求方式、請求路徑等等,start_response是應用處理完畢后,需要調用的函數,

用於告訴服務設置響應的頭部信息或錯誤處理等等,他必須是一個字典,

如::{請求信息:’***’,請求方式:’****’,請求路徑:’****’}。

 

我們先定義一個可調用的函數,它可以使用服務器傳給它的請求相關的內容 environ,

 

然后是服務器:可以在項目文件中找到wsgi_server.py

 

 

 

uWSGI ,uWSGI全稱(Web Server Gateway Interface

python安裝uWSGI : :  https://www.runoob.com/python3/python-uwsgi.html 

uWSGI也是一個web服務器,它實現了WSGI協議、uwsgi、http等協議。Nginx中HttpUwsgiModule的作用是與uWSGI服務器進行交換。

他不是一個框架,一個軟件,或者是API,而只是一種規范描述web server如何與web application通信的規范。

WSGI協議主要包括serverapplication兩部分

===========================

底層內容:有興趣可以了解一下,沒有興趣勿看

WSGI server負責從客戶端接收請求,將request轉發給application,將application返回的response返回給客戶端;

WSGI application接收由server轉發的request,處理請求,並將處理結果返回給server。

application中可以包括多個棧式的中間件(middlewares),這些中間件需要同時實現server與application,

因此可以在WSGI服務器與WSGI應用之間起調節作用,

對服務器來說,中間件扮演應用程序,對應用程序來說,中間件扮演服務器

uWSGI使用通用的API和通用的配置風格來實現應用服務器 (對於各種編程語言和協議),代理,進程管理器和監控器。

 核心 :》 (實現配置、進程管理、socket創建、監控、日志記錄、共享內存塊、ipc、集群成員和 uWSGI訂閱服務器)

請求插件:》 (為各種語言和平台實現應用服務器接口:WSGI, PSGI, Rack, Lua WSAPI, CGI, PHP, Go ...)

網關:》 (實現負載均衡器、代理和路由器)

Emperor :》(實現大量實例管理和監控)

循環引擎 :》(實現事件和並發,組件可以在reforking, threaded, asynchronous/evented和green thread/coroutine模式下運行。支持多種技術,

包括uGreen, Greenlet, Stackless, Gevent, Coro::AnyEvent, Tornado, Goroutines和Fibers)

 

 

django WSGI application   django項目中可以找到

WSGI application應該實現為一個可調用對象,例如函數、方法、類(包含`call`方法)。需要接收兩個參數:

  • 一個字典,該字典可以包含了客戶端請求的信息以及其他信息,

   可以認為是請求上下文,一般叫做environment(編碼中多簡寫為environ、env)

  • 一個用於發送HTTP響應狀態(HTTP status )、響應頭(HTTP headers)的回調函數

通過回調函數將響應狀態和響應頭返回給server,同時返回響應正文(response body),

響應正文是可迭代的、並包含了多個字符串。

 

下面是Django中application的具體實現部分:

 

可以看出application的流程包括:

1,加載所有中間件,以及執行框架相關的操作,設置當前線程腳本前綴,發送請求開始信號;

2,處理請求,調用get_response()方法處理當前請求,該方法的的主要邏輯是通過urlconf找到對應的view和callback,

按順序執行各種middleware和callback。

3,調用由server傳入的start_response()方法將響應header與status返回給server。

4,返回響應正文

下面表示WSGI server服務器處理流程中關鍵的類和方法。

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM