2014-06-17 60 views
2

我有一個Web應用程序,而不是匆忙構建,只是將我們的想法演示給選定的少數人。它需要更新的信息,所以我用jQuery和PHP使用快速和骯髒的短輪詢技術將我們的演示放在一起。性能並不重要,因爲在任何時候只有少數人訪問此演示。需要建議轉換我的應用程序,以允許實時更新

該應用程序基本上是一個實時隊列,從一個Android應用程序提供項目。現在我有android發送POST數據到一個API添加一條記錄到數據庫。然後,我使用短輪詢來保持隊列在網絡方面的更新(不理想,我知道)。

既然演示結束並且有很大的興趣,我的任務就是這個應用程序必須能夠擴展到我估計的每天大約2500個客戶端連接(500家商店w /在未來一年左右的時間內,最多可連接5臺瀏覽器)。

爲了使這成爲現實,我一直在閱讀使這個應用程序實時以及使用長輪詢技術(如Comet)的各種方法。我的腦袋現在有了各種各樣的選擇。我已經看過像Pusher這樣的服務,但我們真的想盡量減少每月的成本,所以這只是最後的選擇。 Node.js似乎是流行的選項,但這需要我重寫我的整個應用程序,不是嗎?

即使我確實使用類似Node.js的東西,但我對於如何處理來自android應用程序的傳入POST數據並且讓它更新數據庫並將其發送到客戶端瀏覽器感到失落。

實時隊列只是Web應用程序的一部分,其餘部分可以在不需要任何實時功能的情況下完成。如果我使用node.js,我可以在node.js中寫入隊列,並使用更傳統的LAMP堆棧運行網站的其餘部分?

我的確有控制商店中使用哪些瀏覽器的優勢(Chrome),所以我並不需要擔心傳統的瀏覽器支持。

真的任何意見,可以引導我在正確的方向將不勝感激。看起來似乎有很多選項,但我不確定哪一個最適合我的情況。

+1

研究使用網絡套接字而不是「實時」數據的任何輪詢。此外,請看看pubsub模式 - http://en.wikipedia.org/wiki/Publish%E2%80%93subscribe_pattern,因爲您所描述的似乎適合模型。 –

+0

像Ratchet這樣的網絡套接字解決方案能夠很好地適應我的工作嗎? – dmarzio

+0

可能,但你必須測試才能確定。 –

回答

1

你說得對,因爲Javascript的異步特性,node.js更適合被動的API並執行基於事件的過程。

但是,這並不是說你無法在PHP中實現相同的效果。雖然我是一名node.js粉絲和倡導者,但聽起來您已經使用您選擇的語言完成了相當多的工作,並且我感覺如果有一種方法可以使用PHP來獲得此功能,那麼您會付諸實踐。將應用程序跨多種語言/框架拆分爲一個功能聽起來並不是最好的想法。

您的主要擔心似乎是投票。具體而言:2500名用戶同時長時間投票。最明顯的出路是你採用HTML5 WebSockets。存在的庫可以在PHP中實現此功能,例如Ratchet。每個用戶都會使用websocket連接到中央服務器。通過這種連接,每個客戶端都可以向服務器發送數據和從服務器接收數據。作爲這個鏈中的中介步驟的服務器可以隨意將數據從一個客戶端傳遞到另一個客戶端,包括存儲數據。

你可能想知道這是如何比長輪詢更具擴展性。關於巨大的性能改進right here有一篇很棒的文章。它歸結爲websockets只在事件發生時才發送數據,而不是持續的「民意調查」。

相關問題