標籤:rcu ebs 邏輯 技術分享 ges name eth uri 參數
學寫python的時候,我們多多少少都接觸到了web程式,然而你有沒有想過,當瀏覽器發送了一個http請求時,等待接收這個請求的後端代碼是一種什麼樣的思想感情?
就像下面這張圖裡畫的一樣,後端也許是一段java代碼,也許是php代碼,當然,如果代碼出自我手,最可能的還是一段python代碼。這就好比,當你在社交軟體上給一個陌生人發了一條訊息,對面這個人可能是英國人、印度人也有可能是一隻羊或者一隻狗。。。那麼問題來了,他們怎麼知道你在說啥?當然了,在web服務的世界裡沒有現實中那麼複雜,我們不需要考慮後台接收請求的是一隻羊。。。接下來我們就來看看,在url和代碼之間到底發生了什麼見不得人的事兒~
首先,當我們寫了一段代碼可以被http訪問的時候,我們就建立了一個webserver。從中我們不難看出,這就是瀏覽器和web伺服器之間的日常工作,對於伺服器來說,要做的5件事情中,只有第3件是根據請求的不同在發生變化的:
因此,本著解耦的思想,就有人提出了新的方案,將伺服器端反覆做的事情獨立出來,封裝起來,對於程式員來說,我們只需要關注處理請求的部分,有專門的邏輯替我們處理這萬年不變的4步,是不是就使得代碼簡潔了很多?
然而,當我們這麼做之後,伺服器和app之間就不再是緊密團結在一起的整體,伺服器必須知道要講接收到的請求、參數以什麼方式傳達到app端,這就是我們在django中可以使用request.method、request.POST.get等方法的原因——約好了呀,說高大上點兒,這種約定就叫做協議!
是我們在寫django時候經常做的事情,左側是一個http請求,右側是python代碼,我們只需要在代碼裡寫一個函數,url配一配,就可以使用左側的url請求到後端的代碼,為什麼如此順利,是什麼讓http和python代碼之間的代溝消失了?
以Django架構為例,Django在這個過程中做了哪些事兒呢?它就是很貼心的把整個伺服器要做的事情以及伺服器和app互動的過程給封裝起來了呀~~~
這麼說起來,Django對我們的代碼來說,真是又當爹又當媽的模範家長啊!
當然啦!除了Django之外,python還有很多其他的web架構、模組都做了同樣的封裝,他們也能對http請求進行分析,並承擔起和後台代碼互動的重任,然而我們知道人與人之間即便是交流同樣的事情也有很多種不同的表達方式,因此,我們說,雖然同樣是做http和代碼的互動工作,但對協議的定義可能不盡相同。
下面列舉一些常見的 Python HTTP 伺服器,以及它們目前的大致發展情況,以便使用者的對比選擇:
| Name |
Version |
http 1.1 |
Flavour |
Repo. |
Community |
| Gunicorn |
0.6.4 |
No |
processor/thread |
GIT |
#gunicorn |
| uWSGI |
Trunk (253) |
Yes |
processor/thread |
repo |
Mailing List |
| FAPWS3 |
0.3.1 |
No |
processor/thread |
GIT |
Google Groups |
| Aspen |
0.8 |
No |
processor/thread |
SVN |
Google Groups |
| Mod_WSGI |
3.1 |
Yes |
processor/thread |
SVN |
Google Groups |
| wsgiref |
Py 2.6.4 |
No |
processor/thread |
SVN |
Mailing List |
| CherryPy |
3.1.2 |
Yes |
processor/thread |
SVN |
Planet, IRC |
| Magnum Py |
0.2 |
No |
processor/thread |
SVN |
Google Groups |
| Twisted |
10.0.0 |
Yes |
processor/thread |
SVN |
Community |
| Cogen |
0.2.1 |
Yes |
callback/generator |
SVN |
Google Groups |
| GEvent |
0.12.2 |
Yes |
lightweight threads |
Mercurial |
Google Groups |
| Tornado |
0.2 |
Yes |
callback/generator |
GIT |
Google Groups |
| Eventlet |
0.9.6 |
Yes |
lightweight threads |
Mercurial |
Mailinglist |
| Concurrence |
tip |
Yes |
lightweight threads |
GIT |
Google Groups |
參考:http://www.nowamagic.net/academy/detail/1330308
還能不能愉快地起一個web服務啦?——1st Step!白話http和代碼互動的那點兒事兒~