還能不能愉快地起一個web服務啦?——1st Step!白話http和代碼互動的那點兒事兒~

來源:互聯網
上載者:User

標籤: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和代碼互動的那點兒事兒~

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.