2012-08-17 138 views
5

我目前正在開發一個將使用websockets進行客戶端 - 服務器通信的PHP應用程序。我聽說過很多次PHP不應該用於服務器應用程序,因爲它缺少線程機制,內存管理(循環引用)或不方便的套接字庫。帶有PHP的Websocket服務器

到目前爲止,一切工作都很好。我使用phpws作爲websocket庫和Doctrine DBAL來訪問不同的數據庫系統; PHP是5.3.8版本。服務器應該最多爲30個客戶端提供服務。然而,特別是在最近幾天,我閱讀了幾篇文章,指出PHP對於長時間運行的應用程序無效。

現在我不知道是否應繼續在PHP中使用websockets或重新構建整個serverside應用程序。我用Socket.IO嘗試過Python,但我沒有得到我期望的結果。

我想我有以下選擇:

  • 保持一切,因爲它是。
  • 使應用程序將Ajax與Socket.IO結合使用 - 例如運行一個服務器端腳本,在數據提交給服務器時調用客戶端的ajax調用。

最後一點聽起來很有趣,雖然它需要一些工作..會是服務器一次執行所有客戶端請求的問題嗎?

你會推薦什麼? PHP的內存管理問題(我每次客戶端發送數據到服務器時都使用gc_collect)仍然有效嗎?除了顯而易見的原因(沒有線程,...)之外,還有其他原因不使用PHP作爲服務器?

+0

所以你問你是否應該放棄你目前的工作設計?像這樣的問題在這裏並不真正有效,你將不得不決定自己編碼。你知道哪些其他服務器端語言?發佈你的python代碼,如果你決定重寫你的代碼,有人可以幫你找到問題。 – xthexder 2012-08-17 13:36:00

回答

4

您可以嘗試在服務器上另一個端口上的一個節點服務器上運行的socket.io(即如果你沒有使用像goDaddy的託管計劃)。

我使用它,表演真的很令人滿意。 我有一個端口80上的apache服務器爲我的php文件提供服務,並且我的服務器 - 客戶端通信是使用在端口8080(dev)或843(prod)上運行socket.io的Node.js服務器完成的。

Node.js非常輕巧,性能卓越,但您需要將其作爲服務器運行。 Nodejitsu.com是一個託管解決方案,它提供websocket協議並處於測試階段,所以它現在仍然是免費的。請注意,您需要使用socket.io偵聽端口80,這是來自他們網絡的限制。

如果您希望您的網頁全部在端口80上訪問,那麼您將需要一個反向代理,如varnish

我希望有幫助!祝你今天愉快。

+1

+1對於帶有socket.io的Node.js以獲得最佳性能 – 2012-08-17 17:26:08

0

除了顯而易見的原因(沒有線程,...) 是否有其他原因沒有使用PHP作爲服務器?

是的,許多套接字函數互相不兼容,它是一個地獄調試。

我想類似的東西我自己和退出沮喪信德每一個功能我認爲是有意義沒有做什麼,我預計