因為目前已經有很多關于WSGI的博客或者文章了侯嘀,通過這些文章已經能夠很好的去了解WSGI服務器另凌,所以這里就不再重復造輪子,簡單寫寫我個人的理解戒幔。
一吠谢、什么是WSGI
WSGI是一種接口,規(guī)定了web服務器應該怎么與web應用進行交互诗茎∧也罚可以理解為WSGI只是一種約定,所有的Python Web服務器都應該遵循這個約定错沃,這樣方便了不同的python web應用在不同的web服務器之間遷移栅组。
Attention
WSGI的全稱其實是Python Web Server GateWay Interface,所以只是約定了Python的web應用與Python服務器之間的接口
二枢析、WSGI與Web應用
- WSGI可以分成兩部分server/gateway以及application/framework玉掸,除此之外,也還可以多加一部分作為中間件middleware醒叁。
- Server/Gateway 這部分是后端里面最“前面”的部分司浪,所有的請求都是先到達這一部分。
- Middleware 這部分是作為連接Server與Application之間的部分主要承擔的工作就是路由把沼、負載均衡啊易、請求預處理等。
- Application/Framework 這里就是真正處理請求的部分饮睬,包含了大部分的處理邏輯租谈。
- WSGI主要的部分就是規(guī)定了application必須是一個可調用的對象,可以是一個函數(shù)捆愁、一個類或者是一個實現(xiàn)了call的實例割去,并且這個對象必須接受兩個參數(shù)environ和start_response,而server側必須通過位置參數(shù)來調用這個可調用對象昼丑。environ參數(shù)是一個字典呻逆,包含了請求的信息,而start_response參數(shù)則是一個可調用對象菩帝,必須接受兩個位置參數(shù)咖城,status和response_header。status就是個字符串呼奢,表示HTTP 響應狀態(tài)宜雀,比如“400 Bad Request”這種,response_header就是個鍵值對的列表控妻,包含了響應頭的字段值州袒。
- 總的來說就是一個請求到達Server側后揭绑,Server會生成請求對應的environ參數(shù)弓候,然后調用application(environ,start_response)郎哭,application內部處理完請求后,生成響應狀態(tài)和響應請求頭菇存,并用這兩個參數(shù)調用start_response夸研,返回結果到Server,Server最后生成響應依鸥。
其實協(xié)議文檔里面寫了start_response函數(shù)必須返回一個write可調用對象亥至,但這個對象具體的作用是啥,暫時還沒看懂贱迟,看懂后補充
三姐扮、常見WSGI服務器
Gunicorn、uWSGI這些都是