fastcgi與cgi的區別
先講下cgi:
cgi在2023年或更早的時候用得比較多, 以前web伺服器一般只處理靜態的請求,如果碰到乙個動態請求怎麼辦呢?web伺服器會根據這次請求的內容,然後會fork乙個新程序來執行外部c程式(或perl指令碼...), 這個程序會把處理完的資料返回給web伺服器,最後web伺服器把內容傳送給使用者,剛才fork的程序也隨之退出。 如果下次使用者還請求改動態指令碼,那麼web伺服器又再次fork乙個新程序,周而復始的進行。
後來出現了一種更高階的方式是, web伺服器可以內建perl直譯器或php直譯器。 也就是說這些直譯器做成模組的方式,web伺服器會在啟動的時候就啟動這些直譯器。 當有新的動態請求進來時,web伺服器就是自己解析這些perl或php指令碼,省得重新fork乙個程序,效率提高了。
fastcgi的方式是,web伺服器收到乙個請求時,他不會重新fork乙個程序(因為這個程序在web伺服器啟動時就開啟了,而且不會退出),web伺服器直接把內容傳遞給這個程序(程序間通訊,但fastcgi使用了別的方式,tcp方式通訊),這個程序收到請求後進行處理,把結果返回給web伺服器,最後自己接著等待下乙個請求的到來,而不是退出。
fastcgi跟cgi的區別是:
在web伺服器方面在對資料進行處理的程序方面
cgifork乙個新的程序進行處理 讀取引數,處理資料,然後就結束生命期
fastcgi用tcp方式跟遠端機子上的程序或本地程序建立連線 要開啟tcp埠,進入迴圈,等待資料的到來,處理資料
舉個例子: 服務端現在有個10萬個字單詞, 客戶每次會發來乙個字串,問以這個字串為字首的單詞有多少個。 那麼可以寫乙個程式,這個程式會建一棵trie樹,然後每次使用者請求過來時可以直接到這個trie去查詢。 但是如果以cgi的方式的話,這次請求結束後這課trie也就沒了,等下次再啟動該程序時,又要新建一棵trie樹,這樣的效率就太低下了。 而用fastcgi的方式的話,這課trie樹在程序啟動時建立,以後就可以直接在trie樹上查詢指定的字首了。
cgi與fastcgi的區別
工作的原理 每當客戶請求cgi的時候,web伺服器就請求作業系統生成乙個 fork 新的cgi直譯器程序 如php cgi.exe 當cgi滿足要求後,web伺服器就殺死這個程序 概念 fastcgi是用來提高cgi程式效能的。類似於cgi,fastcgi也可以說是一種協議 工作原理 web ser...
FastCgi 和Cgi的區別
cgi 1.fork and excute 每次來乙個請求,就fork出去乙個子程序,結束之後再關閉。來新請求還要重新fork子程序。fastcgi 可以理解為常駐型的cgi。使用了程序 執行緒池的概念 master程序,和眾多worker程序 每次來乙個請求時,只需要將socket長連線 包含環境...
CGI 和 FastCGI 協議的執行原理
在用php開發的過程中,我們常常使用nginx或者apache作為我們的web伺服器。但是php是如何與這些web伺服器通訊的呢?要談fastcgi就必須先說說cgi。那什麼是cgi?cgi協議同 http 協議一樣是乙個 應用層 協議,它的 功能 是為了解決 web 伺服器與 php 應用 或其他...