導讀:html
本系列深刻淺出的講述瞭如何用 Python 從 0 開始,寫一個 web 服務器,並讓其與業界流行的 web 框架協同工做,最後還進一步完善了開頭的 web 服務器 demo,讓其能夠支持多併發請求的處理,並解決了過程中遇到的「殭屍進程」等一系列 socket/網絡編程 中的常見問題,圖文並茂、按部就班,是篇很是不錯的教程,對了解整個 Web 編程理論至關有幫助,推薦一看。python
做者:伯樂在線 - 高世界 翻譯nginx
看問題要看到本質:從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 服務器(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服務器(3)
http://python.jobbole.com/81820/
Let’s Build A Web Server. Part 3.
http://ruslanspivak.com/lsbaws-part3/
https://zhuanlan.zhihu.com/p/25038203
全部的 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 部分。
圖片來源(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源碼剖析
[10] flask 源碼解析:應用啓動流程
問題: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種部署方式
[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 ?
[8] 在生產系統使用Tornado WebServer來代替FastCGI加速你的Django應用
http://www.cnblogs.com/Alexander-Lee/archive/2011/05/02/tornado_host_django.html
Tornado 中文文檔