深刻理解 Python WSGI:一塊兒寫一個 Web 服務器

導讀:html

本系列深刻淺出的講述瞭如何用 Python 從 0 開始,寫一個 web 服務器,並讓其與業界流行的 web 框架協同工做,最後還進一步完善了開頭的 web 服務器 demo,讓其能夠支持多併發請求的處理,並解決了過程中遇到的「殭屍進程」等一系列 socket/網絡編程 中的常見問題,圖文並茂、按部就班,是篇很是不錯的教程,對了解整個 Web 編程理論至關有幫助,推薦一看。python

做者:伯樂在線 - 高世界 翻譯nginx

一、什麼是 Web 服務器,以及怎樣工做的?

看問題要看到本質:從Web服務器提及web

http://bit.ly/2N1iiTsapache

一塊兒寫一個 Web 服務器(1)django

http://python.jobbole.com/81524/編程

Let’s Build A Web Server. Part 1.flask

http://ruslanspivak.com/lsbaws-part1/segmentfault

二、Web 服務器和 Web 框架如何經過 WSGI 協同工做?

一塊兒寫一個 Web 服務器(2)服務器

http://python.jobbole.com/81523/

Let’s Build A Web Server. Part 2.

http://ruslanspivak.com/lsbaws-part2/

花了兩個星期,我終於把 WSGI 整明白了

https://zhuanlan.zhihu.com/p/68676316

三、Web 服務器如何處理併發請求?

一塊兒寫一個Web服務器(3)

http://python.jobbole.com/81820/

Let’s Build A Web Server. Part 3.

http://ruslanspivak.com/lsbaws-part3/

四、從0到1,Python Web開發的進擊之路

https://zhuanlan.zhihu.com/p/25038203

五、flask 源碼解析:應用啓動流程

http://bit.ly/2n1fyaT

全部的 python web 框架都要遵循 WSGI 協議,若是對 WSGI 不清楚,能夠查看《python wsgi 簡介》。

在這裏仍是要簡單回顧一下 WSGI 的核心概念。

WSGI 中有一個很是重要的概念:每一個 python web 應用都是一個可調用(callable)的對象。在 flask 中,這個對象就是 app = Flask(__name__) 建立出來的 app,就是下圖中的綠色 Application 部分。要運行 web 應用,必須有 web server,好比咱們熟悉的 apache、nginx ,或者 python 中的 gunicorn ,咱們下面要講到的 werkzeug 提供的 WSGIServer,它們是下圖的黃色 Server 部分。

The Python WSGI server-application interface.

圖片來源(https://www.toptal.com/python/pythons-wsgi-server-application-interface)

Server 和 Application 之間怎麼通訊,就是 WSGI 的功能。它規定了 app(environ, start_response) 的接口,server 會調用 application,並傳給它兩個參數:environ 包含了請求的全部信息,start_response 是 application 處理完以後須要調用的函數,參數是狀態碼、響應頭部還有錯誤信息。

WSGI application 很是重要的特色是:它是能夠嵌套的。換句話說,我能夠寫個 application,它作的事情就是調用另一個 application,而後再返回(相似一個 proxy)。通常來講,嵌套的最後一層是業務應用,中間就是 middleware。這樣的好處是,能夠解耦業務邏輯和其餘功能,好比限流、認證、序列化等都實現成不一樣的中間層,不一樣的中間層和業務邏輯是不相關的,能夠獨立維護;並且用戶也能夠動態地組合不一樣的中間層來知足不一樣的需求。

六、推薦閱讀

[1] Python HOWTO 官方文檔:Socket 編程

http://python.jobbole.com/81860/

[2] Python Realtime

http://pyzh.readthedocs.org/en/latest/python-realtime.html

[3] 做爲一個python開發者須要知道的關於服務器的知識

http://python.jobbole.com/82009/

[4] 理解Python WSGI

http://www.letiantian.me/2015-09-10-understand-python-wsgi/

[5] 專題:淺入淺出Flask框架

http://www.letiantian.me/topic-learn-flask/

[6] 用Python寫一個簡單的Web框架

http://python.jobbole.com/83817/

[7] 深刻理解異步Web服務器 Tornado

http://python.jobbole.com/83826/

[8] flask route設計思路

http://segmentfault.com/a/1190000004213652

[9] Python微框架Flask源碼剖析

http://bit.ly/2c7XvXO

[10] flask 源碼解析:應用啓動流程

http://bit.ly/2n1fyaT

 

五、關於 wsgi 問題集錦

問題:nginx<--->fstcgi<--->wsgi(flup)<--->web.py/Flask/Django這個模式是nginx和python的web網頁的工做模式嗎?

    Flup 一般不是生產環境選擇,Gunicorn,uwsgi + nginx 和 Tornado 是幾種常見方案吧。

[1] nginx<--->fstcgi<--->wsgi(flup)<--->web.py這個模式是nginx和python的web網頁的工做模式嗎?

http://www.zhihu.com/question/20221856

[2] 全面解讀python web 程序的9種部署方式

http://lutaf.com/141.htm

[3] 深刻理解 Python WSGI fastcgi

http://www.cnblogs.com/babykick/archive/2012/01/20/2328047.html

[4] 在Mac上使用Nginx和FastCGI部署Flask應用

    http://segmentfault.com/a/1190000002652109

    nginx上用fastcgi配置python環境(一)  

    http://blog.163.com/sky20081816@126/blog/static/1647610232010824262695/

[5] 基於nginx和uWSGI在Ubuntu上部署Django

    http://www.jianshu.com/p/e6ff4a28ab5a

    快速部署Python應用:Nginx+uWSGI配置詳解

    http://developer.51cto.com/art/201010/229615_all.htm

[6] 高性能框架gevent和gunicorn在web上的應用及性能測試

    http://rfyiamcool.blog.51cto.com/1030776/1276364

    Gunicorn快速入門

    http://www.cnblogs.com/ArtsCrafts/p/gunicorn.html

[7] gunicorn, uwsgi, fast-cgi, tornado 等等,你們通常都用哪一個作 server ?

http://python-china.org/t/100

[8] 在生產系統使用Tornado WebServer來代替FastCGI加速你的Django應用

    http://www.cnblogs.com/Alexander-Lee/archive/2011/05/02/tornado_host_django.html

    Tornado 中文文檔

    http://www.tornadoweb.cn/documentation

相關文章
相關標籤/搜索