CGI和servlet運行方式本質的區別是什麼?PHP和Java在Web開發的原理有哪些本質不同?

來源:互聯網
上載者:User

回複內容:

現在以CGI方式啟動並執行伺服器應該已經沒有了,PHP是FastCGI,也是這個協議還能續到今天的最主要的原因。Servlet和Python的WSGI可以類比,它是一種編程介面,通過這種編程介面可以將Web Server和Web應用清晰地劃分開界限,每個進入的請求將會調用一次Servlet的介面,這樣Web應用就無需關心Web Server使用了多線程還是多進程還是多工等技術細節,而只需要實現這個介面就行了。既然是編程介面,那麼肯定是跟程式設計語言有關的,Servlet就只能用在Java中,其他語言是不能用Servlet編程的(除非有辦法做到和Java相容)
FastCGI是一種網路通訊協定,它是工作在socket上、而與語言無關的。以前的CGI一般來說是每個請求進來時,從server fork出一個進程,僅僅處理這一個請求,處理完成就退出,處理的過程是從環境變數中擷取HTTP頭,從標準輸入中讀取POST資料,從標準輸出中輸出HTTP響應。由於需要不停地建立和銷毀進程,這種實現方式效能是比較低下的,功能也受到許多限制。FastCGI是CGI的一種改進,它在單個串連上接受連續的多個請求,一個一個進行處理,這樣就提高了輸送量。FastCGI和CGI一樣與語言無關,任何語言只要遵循FastCGI的協議就可以使用FastCGI;但是它的處理模型是受限的,通常在單個串連上一次只能處理一個請求,這樣要達到一定的並發度,就必須建立許多進程(FastCGI也有multiplexing的功能,但不知道支援的如何)

但是其實從Web應用的角度來看,兩者的區別並不大,PHP雖然使用FastCGI,但也是對每個請求調用一次PHP指令碼。雖然許多PHP程式員喜歡把網頁和代碼混在一起弄得很難維護,但PHP也是支援使用OOP的方式,像Java一樣使用MVC的;Java也同樣支援JSP這樣的可以內嵌程式碼的模板。區別有一些,比如Java在同一個進程中工作,可以調用全域對象,可以使用額外的線程池等等,而PHP的對象的生命週期基本限制在單個請求範圍內之類,但許多東西還是類似的,都是面向Request進行編程。看差別的話從簡單的伺服器代碼入手
CGI 看Python的內建的CGIHTTPServer
主要代碼如下, 在run_cgi,fork了進程再運行cgi程式,和伺服器處理序是父子關係中
Servlet看spring+jetty的,Servlet看spring+jetty的,
app代碼和伺服器在同一個進程裡的app代碼和伺服器在同一個進程裡的
  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.