2011-05-27 62 views
6

我決定使用「Http KeepAlive」和「long polling」來快速響應應用程序的體系結構。 PHP有什麼解決Tornado爲c10k所做的問題?如果我使用PHP,如何解決c10k問題?

我正在考慮使用nginx + PHP-FPM。但是,對於1000個活動連接,將不會有1000個PHP-FPM進程?

然後我想我們會遇到同樣的問題,Apache有許多常規連接。不是嗎?

編輯:據我所知,如果我只想HTTP KeepAlive,nginx就足夠了。但是如果我也想要像龍捲風支持那樣進行長時間投票呢?有什麼類似的PHP?

回答

0

我不明白你的意思。 c10k與web服務器(apache,nginx等)沒有關係到PHP。

如果使用nginx的,你不應該擔心它

+2

不能建議nginx的高度不夠 – m4rc 2011-05-27 11:51:41

+2

PHP,必須在服務器上執行,以便能夠服務器PHP頁面。 Nginx只處理靜態內容或將請求發送到其他進程。 – Jonas 2011-05-27 12:04:21

6

活動連接(如,加載和運行規定的PHP腳本),是的,會有許多PHP進程作爲活躍連接。但KeepAlive大約有被動的連接,Nginx非常善於處理被動KeepAlive連接,資源利用率非常低 - 即使是成千上萬的連接。

Apache的問題在於,它在通常的配置中使用mod_php和mpm_prefork,每個連接都需要一個進程,即使它只是一個被動的KeepAlive。這意味着即使連接是被動的,大多數Apache服務器實際上做的都需要在內存中有一個PHP進程,但是如果您將PHP作爲FastCGI運行,情況並非如此。如果您將PHP作爲FastCGI運行並選擇mpm_worker,它將爲每個連接創建一個更輕量級的線程,但Apache仍然可以處理大量被動連接,但它仍然不如Nginx。

+2

+1內容豐富。 – Jonas 2011-05-27 12:08:27

+0

+1。我也用長輪詢要求編輯了這個問題。 – Sabya 2011-06-10 06:58:29

2

我對此的回答是看看node.js,你指定一個100K的活動連接,只要你有正確的硬件,Node.js應該處理得很好。

當進行連接時,節點不產生新進程,套接字被放置在排隊系統中,但它不是典型的排隊系統,其中1個連接被處理,然後是下一個連接。

Node.js在處理很多很多連接的時候臭名昭着,那裏的HTTP客戶端庫基於Keep-Alive傳輸方式,以及非常快速和強大。

我已經使用過它了,我必須說它非常易於使用,它基於超快的Google V8引擎,用於Chrome中的JavaScript,這意味着它速度非常快,您應該看一看在這一點上,你會發現它對這類事情是可行的。