servlet與cgi的區別與關係(3)--關於CGI:Tomcat、PHP、Perl、Python和FastCGI之間的關係

Web服務器是一個很簡單的東西,並不負責動態網頁的構建,只能轉發靜態網頁。同時Apache也說,他能支持perl,生成動態網頁。這個支持perl,其實是apache越位了,做了一件額外的事情。

       現在我們看生成動態網頁這件事情。

 

       CGI的定義是:外部應用程序與Web服務器之間的接口。

       明白了吧?也就是說,所謂的動態網頁,都是要外部應用程序生成的,而不是Web服務器能幹的事情。所以,最初的、最簡單的CGI,是使用C來寫的,很簡單。

       到了後來,大家覺得老用C也不是個辦法啊,效率這麼慢,老闆逼得緊,天天加班不是個事,於是PHP、ASP、Java、Perl、Python這些高級語言就摻合進來了。

       其中,ASP由於是微軟一家單獨支撐,不開源,還要買他那麼貴的服務器軟件,開發者就不想用了,越來越沒落。

       用Java語言來寫CGI,就是JSP技術

       PHP的正名爲:超文本預處理語言。從這個名字可以看出,就是專門爲動態網頁而生的,它的好處是可以潛入HTML,而不是像C那樣重新生成整個文本。這個現在已經不是優勢了,JSP一樣可以做到這點。PHP由於是動態加載,邊解釋邊執行,所以效率沒有java高,這個問題可以用預編譯和使用C、C++模塊來解決。

 

       這些語言裏面,Java的發展是最迅速的,所以Java產生了一堆好東西,比如Tomcat,比如IBM的Websphere,WebSphere是真正的應用服務器,而Tomcat還算不上,因爲他還不能真正支持很多J2EE的API,但是Tomcat作爲servlet的容器,基本滿足寫CGI的需求,這樣使得Tomcat被使用得非常廣泛。

 

        Tomcat是apache的一個子項目,它也不務正業,也支持做web服務器的功能,這是很搞笑的,你一個動態網頁處理容器,幹嘛要做web服務器呢?這讓我想到做產品時產品經理的貪嗔癡。但Tomcat全部使用java完成,並且,他是單進程結構,是使用CPU密集型的架構來設計的,而上篇文章講到web服務器其實是IO密集型的,這樣Tomcat在處理大規模的Web請求時,根本沒法玩。所以很多人說,使用apache處理靜態網頁,使用tomcat處理動態網頁。

 

        除了Java有Tomcat作爲容器來進行支撐外,其他的CGI就很土了,都是腳本,一是需要邊解釋邊執行,二是都是一錘子買賣,一錘子買賣的意思是,這些個腳本的CGI,都是使用其解釋器+CGI部分合成一個CGI程序,apache接收到請求後,就啓動一個CGI程序,生成動態內容後,CGI程序退出。這種方式也太土鱉了,讓我這種長期習慣於windows編程的人非常鄙視。

 

        這種方式顯然是不行的,效率非常低,所以,fastCGI就出來了,fastCGI在CGI和web服務器中間再加了一層。

        fastCGI用來管理多個CGI進程,它負責同時生成和回收多個CGI進程,以服務器的內存空間,換取處理時間。

        一個不相關的感想:不論CGI怎麼變,fastCGI可以以不變應萬變,如果把網頁的請求過程看成產業鏈,fastCGI無疑是一個非常好的切入點,可以經久不衰,並且以不變應萬變。

 

        經過fastCGI優化之後,從效率上講,PHP等腳本語言與java只差一點了,這點就是解釋執行,所以php需要預編譯,進行代碼緩存之後,效率應該可以接近jsp。

 

        另外一個問題是,nginx以減少進程的方式革了apache的命,會不會有新的程序,以nginx的方式,來革fastCGI的命呢?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章