2013-02-03 17 views
1

我已經被「招募」了,可以這麼說來幫助開發目前用PHP服務器編寫的PHP項目。我們希望集成一個實時(或至少非常接近它)的聊天功能。可擴展性是一個確定的問題,這種類型的工作絕對不是我的典型。如何將可擴展的長輪詢服務器與PHP集成?

我讀過的關於創建這種聊天功能的一切都需要使用「長輪詢」,這樣服務器不會迅速超負荷運行,而且會崩潰。 PHP和Apache不利於實現這樣的功能,因此我已經探索了一些替代方案,例如Twisted Python。

該網站有約7,000行PHP(即,它很難只是直接切換語言的整個事情),所以我的問題是我怎麼能管理這種情況,儘量試圖將Python和設置一個單獨的服務器?或者,這是否是一個非常糟糕的方式來做到這一點?是否還有其他替代方案更適合? (遺憾的是,我發現許多PHP Comet,甚至AJAX解決方案都沒有絲毫擴展,請注意,Apache服務器不一定是必需的;但是,任何使用的服務器都必須使用PHP和Python等,有獨立的服務器。)

感謝您的幫助!

+0

對不起,這可能不是有用的評論,但到底是什麼的可擴展性是什麼意思? –

+0

如果說該網站有10個用戶同時聊天,而1,000用戶與5000等等。從我的理解來看,Apache將耗盡工作線程,並且PHP不適合在任何重要的情況下打開HTTP請求卷。 – JohnZ

+0

那麼可剝離性就意味着有效? –

回答

2

我會在服務器上使用Tornado來編寫聊天應用程序。客戶端服務器通信可以通過websocket完成。如果您在客戶端使用SockJS,則還可以通過長輪詢來支持較舊的瀏覽器。有很多使用Tornado編寫的示例聊天客戶端。開始非常簡單,而且具有極好的可擴展性。像這樣的聊天服務器可以爲數千個客戶端服務,而不會顯示任何明顯的CPU活動。

這是一個例子,可能有點過工程https://github.com/diggidanne/websocket-chat/blob/master/server.py

+0

剛開始嘗試使用Tornado和websockets。簡單但很有幫助的答案。謝謝! – JohnZ

+0

是的,我們使用Tornado來爲PythonAnywhere的控制檯輸出。我們有縮放問題,但沒有一個是龍捲風的錯。你只需要確保你永遠不會在主線程上執行阻塞操作。 – aychedee

相關問題