您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關php與apache整合類型有哪些,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
一、CGI
CGI(common gateway interface)通常翻譯為共同網關接口,是HTTP服務器與機器上的其他程序進行通信的一個接口,讓Web服務器必要時啟動額外的程序處理動態內容。CGI是一種協議,它定義了Webserver與CGI程序的通信方式。Webserver接受客戶端的HTTP請求,然后建立進程執行CGI程序,客戶端的請求被傳遞給CGI程序,CGI執行后結果再返回Webserver。
CGI的出現讓WEB從靜態變為為動態,隨著Web的越來越普及,很多的網站的都需要有動態的頁面,以便與瀏覽者互交。隨著網絡技術的發展,CGI方式的缺點也越來越突出。每次客戶端請求都需要建立和銷毀進程。因為HTTP要生成一個動態頁面,系統就必須啟動一個新的進程以運行CGI程序,不斷地fork是一項很消耗時間和資源的工作。
二、FastCGI
眾所周知,CGI解釋器的反復加載是CGI性能低下的主要原因,如果CGI解釋器保持在內存中 并接受FastCGI進程管理器調度,則可以提供良好的性能、伸縮性、Fail-Over特性等等。
FastCGI是一個常駐型的CGI,可以一直執行,只要激活后,不會每次都花時間去fork一次,而且還支持分布式運算(使得php程序解釋執行可以單獨交給php服務器),即可以在網站服務器以外的主機上執行并且接受來自其它網站服務器來的請求。
1、Web Server 啟動時載入FastCGI進程管理器(IIS ISAPI或Apache Module);
2、FastCGI進程管理器自身初始化,啟動多個CGI解釋器進程 (在任務管理器中可見多個php-cgi.exe)并等待來自Web Server的連接。
3、當客戶端請求到達Web Server時,FastCGI進程管理器選擇并連接到一個CGI解釋器。Web server將CGI環境變量和標準輸入發送到FastCGI子進程php-cgi.exe。
4、FastCGI子進程完成處理后將標準輸出和錯誤信息從同一連接返回Web Server。當FastCGI子進程關閉連接時,請求便告處理完成。FastCGI子進程接著等待并處理來自FastCGI進程管理器(運行在 WebServer中)的下一個連接。 在正常的CGI模式中,php-cgi.exe在此便退出了。
三、Module
把php編譯為apache的模塊,就要考慮apache的MPM的工作模式。
首先我們要了解什么是MPM:
MPM:Multi Path Modules (多道處理模塊)用于定義apache在響應多個用戶請求時所工作的模型。有三種MPM模式:
prefork(一個請求一個進程響應);
worker(一個請求用一個線程響應,啟動多個進程每個進程生成多個線程);
event(一個進程處理多個請求);
以模塊安裝的php沒有獨立的進程,是作為apache的模塊和apache一起啟動的。
以上三種MPM模式,worker模式會比prefork模式占據更少的內存,高并發下的表現更好。而且使用多進程和多線程混合模式,即使有一個線程掛了,也只影響和該線程同進程的其他線程,不會影響到其他的進程。但是如果有特別多的線程都使用keep-alive的長連接方式,則線程會一直被占據直到超時才釋放,導致在高并發場景下無可用線程。而event模式使用了一個專門的線程來處理這些keep-alive類線程,較好的解決了這個問題。
關于php與apache整合類型有哪些就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。