首頁  >  文章  >  後端開發  >  CGI和servlet運作方式本質的差別是什麼?PHP和Java在Web開發的原理有哪些本質不同?

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

WBOY
WBOY原創
2016-12-01 00:01:151882瀏覽

回覆內容:

現在以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程序,和伺服器進程是父子關係中
CGI和servlet運作方式本質的差別是什麼?PHP和Java在Web開發的原理有哪些本質不同?Servlet看spring+jetty的,
CGI和servlet運作方式本質的差別是什麼?PHP和Java在Web開發的原理有哪些本質不同?app程式碼和伺服器在同一個行程裡的
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn