2013-04-16 60 views
5

我有一個相當大的Web應用程序構建SproutCore和PHP作爲後端。我現在想要的是使用websockets實時更新我的​​客戶端應用程序。 從我所知,PHP處理持續連接真的很糟糕。所以我一直在想,我可以使用Go來處理websockets連接,並在每次收到請求時調用我的PHP腳本(這似乎使package成爲可能)。PHP:使用Golang來處理websocket連接

所以我的第一個問題是,你們認爲這是一個好主意(和一個可行的想法,我一直無法找到這樣做的人)還是應該堅持使用PHP?

如果我使用Go來處理websockets連接,我也一直在想我可以逐步從PHP遷移到只使用Go(因爲它比PHP快很多)。如果我這樣做,我將不得不從PHP調用一些Go包。這可以通過PHP exec函數完成嗎?有沒有更好的辦法 ?而且,這是一個好主意嗎?

回答

9

Go非常適合websocket服務器。我已經在Go中構建了websocket服務器,並對它的工作方式非常滿意。我有一個服務在Go websocket服務器上每個月處理30萬用戶,它幾乎不使用Amazon AWS微型實例的1%CPU。不能更快樂。

Websockets確實需要像Go和Node.js這樣的事件驅動框架才能最大化服務器資源。像PHP這樣的分叉式web進程比事件驅動框架消耗更多的資源。

如果您需要在某個時候從PHP調用Go,我建議使用API​​調用。雖然exec也可以。

+0

似乎大有可爲。所以你同意我說每次Go websocket服務器收到請求時調用一個PHP腳本應該比在PHP中處理websocket連接要好得多。 –

+1

我也使用Go來運行我的websocket服務器(其中[this](http://dystroy.org:8004/)),它非常高效和乾淨,我認爲使用PHP來實現這一點確實是一個糟糕的主意 –

+1

調用每次Go websocket服務器收到一個請求時,PHP腳本幾乎肯定會是一個更好的解決方案,如果你的任何數據都是可緩存的,那麼你可以將它緩存在Go實例中,例如,對於兩個,你只使用PHP資源足夠長的時間來回答一個請求,所以只要websockets不會不斷向PHP推送新的請求,那麼PHP進程的總數就會少得多,最後,你將自己的所有PHP代碼遷移到Go,實現巨大的效率提升 – Daniel

-1

這是一個老問題,但我對這個問題的兩分錢......

有,它正是你所要求的一個很好的PHP庫 - WebSockets的。它被稱爲Ratchet。我不會使用node.js(over hyped),或者當php可以做完全相同的事情時,它就是我最熟悉的語言。在大多數情況下,與websockets相比性能的提升並不值得轉換堆棧。如果你打算使用棘輪

其他有用的鏈接:

+1

棘輪維護不善,他們的例子不適用於最新版本的PHP(5.5+)。儘管目前的實現和它需要的大量依賴關係是一個好主意,但它並不能很好地工作。 – dearsina