2013-05-20 74 views
0

我正在爲客戶端開發一個Web應用程序,它要求我知道當前所有用戶的在線狀態。整個應用程序使用jQuery構建,用於前端交付。但是,我發現我可以設置一個獨立的Node.js服務器,能夠持續監視用戶。獲取在線用戶 - node.js vs php + mysql

我原來設計了我,包括將檢查更新數據庫的每一頁的頂部查詢腳本。我將其升級爲使用$ .post()從服務php頁面獲取響應的js。

我需要知道的是將使用什麼樣的性能影響的node.js有,如果我使用它,而不是每一次標準的MySQL訪問?它甚至有可能嗎? 該應用程序可以同時在線有500到1000人之間的任何地方,所以我的客戶在強調性能。

此外,如果這樣的解決方案是可行的,關於我應該如何去實施這將是非常值得歡迎的任何幫助。

回答

1

通過使用Node.js,您可能會看到巨大的性能提升。在線用戶列表可以很容易地保存在Node.js的內存中,你根本不需要訪問數據庫。

作爲用戶列表請求進來,你可以請求用戶添加到用戶列表數據結構,然後返回列表。爲每個用戶保留上次訪問時間。使用setInterval定期運行函數(每秒一次)循環遍歷列表,並消除一段時間內未請求列表的任何用戶。

由於名單將保持在Node.js的進程的內存,就沒有數據庫訪問和請求將非常快速地處理。

+0

多數民衆贊成我以爲:D。 感謝您的建議,我對此非常困惑。如果您不介意回答它,還有一個問題 - 我的客戶的主機使用帶cPanel的LAMP。 node.js應用程序會在其上運行嗎? – Hanut

+0

只要您可以訪問shell,您就可以使用Node。如果你可以訪問shell而不是root訪問,那麼你必須在1024以上的端口上運行Node,比如8080.但是爲了你的目的,我認爲在端口8080而不是端口80上運行會很好。但是,您的主機可能有其他端口防火牆。所以這取決於。您也可以在Heroku或其他主機上運行,​​並使用CORS進行跨域Ajax調用。 – Daniel

+0

嗯我不知道CORS是什麼。另外,我不得不想知道如何從php到node.js服務器獲取用戶詳細信息。我擡頭看[Elephand.io](https://github.com/wisembly/elephant.io),但我仍然不確定這是否能滿足我想要做的事情。 – Hanut

1

你詢問這是非常困難的給予,因爲它取決於你的系統。但是,如果你檢查node.js的基準網頁你會發現,Node.js的顯著跑贏PHP或在這種情況下,其他網絡技術的數字。
我推薦使用socket.io模塊(你可以在他們的網站上找到http://socket.io/的很多例子)。
如果您的主機支持websockets然後socket.io具有驚人的性能。 我不知道的唯一變量是mySql的性能,因爲大部分node.js開發人員都使用nongog,比如mongodb。

+0

我在考慮Daneil的建議。由於所需數據的大小非常小,因此在我的書中爲其執行查詢是沒有意義的。我甚至正在研究一個Java服務器作爲一個選項。但毫無疑問,node.js似乎是要走的路。歡呼並感謝socket.io提到,我在看到你的答案之前正在調查它。 :) – Hanut

+0

丹尼爾的解決方案確實看起來非常好。 –