2012-09-26 128 views
0

我想知道PHP是否可以通過TCP端口充當服務器? 1GB RAM服務器可以處理多少個IDLE連接? PHP可以接收多個連接到一個TCP端口(如Apache在端口80上的連接嗎?)PHP能夠處理多個TCP連接?

如果我有一個客戶端連接到由PHP打開的套接字,我該如何發送數據? (例如,a.php正在監聽端口5000,某些客戶端已連接,稍後b.php需要向該客戶端發送某些內容,並推送一條消息?)

或者我應該使用UDP嗎?

+2

它可以,但任何人考慮使用PHP作爲服務器端守護進程,不應該! – Alnitak

+0

@Alnitak這仍然取決於情況。作爲一般規則,你是對的,但確實有些情況下可以使用php解決輕量級任務以保持低要求。 – arkascha

+0

@arkascha我不認爲PHP解釋器是「輕量級的」 – Alnitak

回答

2

朋友,我的第一個建議是,即使PHP本身可以做到這一點。 PHP並不是實現TCP套接字服務器的最佳技術。原因是因爲記住php 具有每個腳本的max_execution_time並且使服務器永遠運行將需要將此值設置爲0,這意味着永遠。 1gb ram服務器可以處理的連接數量取決於每個php進程消耗多少ram和處理器。

但無論如何,如果你決定用php做。是的,你可以用php構建一個異步的tcp套接字服務器。

只需創建一個監聽5000的主套接字(例如)。對於與這個主插座連接的每個客戶端插座,然後爲每個傳入連接創建一個隨機空閒端口(由OS選擇)的子插座,並且您可以在釋放主控制器的同時開始與子插座交談,以繼續偵聽另一個傳入連接。