2008-10-23 30 views
3

我打算在嵌入式環境中使用php。我們目前的網絡服務器是thttpd。我現在正在考慮兩種選擇:是將它作爲cgi還是作爲SAPI模塊運行。我知道cgi在安全性方面有優勢。但是,如果我們要使用php作爲cgi,則應該將每個請求的php實例加載到內存中。在內存使用方面,PHP作爲thttpd模塊vs CGI

我已經嘗試編譯它作爲thttpd的SAPI模塊,我觀察到thttpd的內存使用情況,特別是rss,不會隨着請求數量的增加而變大。

任何人都可以解釋thttpd如何加載PHP?只要thttpd正在運行,它是否只加載一次並保持駐留在內存中?如果是這樣,我們可以認爲這是cgi的替代品。

它是否執行多線程,即如果有多個http請求在同一時間?還是一次處理一個請求?

是否有一個很好的文檔討論php作爲thttpd模塊的行爲?

回答

1

我有THTTPD沒有經驗,但這裏有一些指針:

  • PHP引擎是線程安全的,但一些擴展都沒有,所以通常人們在一個多線程使用它迴避環境,而是採取一個進程一個請求的方法
  • 是的,通常webserver模塊(如Apache的mod_ *東西)通過駐留工作,但對PHP的巨大speedbump是它需要解析源文件(如果您使用include/require,甚至包含多個源文件)用於每個請求。你可以通過使用諸如APC之類的東西來緩解這個問題,它緩存文件的解析版本
  • 還有一個叫做FastCGI的協議,你可能想看看 - 它基本上是模塊和CGI解決方案之間的交叉 - 它調整了幾個進程,每個進程承載一個CGI問題的實例(本例中爲PHP)並使用它們來處理請求。實例被回收(即它們可以一個接一個地處理多個請求)。