2013-04-07 51 views
0

我正在閱讀服務器推送到客戶端(broswer)的各種方式。我想了解最好的方法。我應該如何實現服務器推送,以便瀏覽器更新數據庫更新?

  1. 長查詢 - 要避免,因爲它阻止服務器端更長的資源。
  2. 節點JS使用回調異步委託----它是單線程。
  3. 在java中編寫回調函數,使用線程在後臺執行任務,然後使用回調將其推送到像node.js這樣的服務器。

這裏的優點是我們將有多個線程並行運行並有效利用CPU。

任何人都可以提出最佳的實施方式嗎?任何其他方式也表示讚賞。

+0

考慮使用Socket.io – SLaks 2013-04-07 20:40:00

回答

0

你似乎誤解了一些東西。您無法比較長時間輪詢與服務器端技術。

長輪詢意味着客戶端(即瀏覽器)向服務器發出AJAX請求。然後服務器保持該請求一直存在,直到出現通知。然後它響應該請求,並且在接收到該更新後立即通過新的AJAX請求調用服務器。

你可以選擇任何你想在服務器端處理的技術。人們用它製作NodeJS,因此我建議使用它。但使用任何適合你更好。

現在另一個誤解是線程提高了性能,因此它們比單線程應用程序更好。實際上情況正好相反:線程的性能變差了(這裏我假設我們正在使用一個核心CPU)。線程提高響應度,但不會提高性能。然而,有一個問題(使用單線程應用程序),如果你正在嘗試做的事情是CPU密集型的,那麼它會阻塞你的服務器。但是,如果您正在討論簡單通知,那麼這根本就不是問題(您不需要CPU能力)。 SIDE注意:您可以觸發儘可能多的NodeJS實例,因爲您可以使用多個內核來利用這些內核(不過,您需要更復雜的代碼)。

你也應該考慮使用WebSockets(從而在服務器端實現一個簡單的TCP服務器)。長時間輪詢效率低下,大多數現代瀏覽器確實支持WebSockets(特別是IE10 +,因爲它始終是IE的問題)。結束語:在服務器端使用您最熟悉的技術。

+0

感謝您的答案。使用線程,我們會優化CPU的利用率,並且我的服務器將部署在多核CPU上。我很好奇您的評論:線程不會提高性能,但仍然會系統響應速度更快。響應性只與良好的性能有關。是的,我們需要了解系統應該產生多少線程以獲得最佳性能,因爲更多的線程也意味着更多的時間用於OS調度作業。但是我當然,如果我們有最佳的線程數,系統會更快地響應。 – user2203937 2013-04-08 04:27:06

+0

另外,爲什麼我們應該使用Node.js異步JS代理模型,只需一個進程,當我們可以用Java(或任何其他語言)產生線程在後臺執行工作時,稍後完成時,通過回調提供響應。在服務器端技術,我們可以更好地控制產卵線程並使系統更具響應能力。爲什麼node.js被賦予如此重要的地位? – user2203937 2013-04-08 04:33:32

+0

@ user2203937因爲事件循環比線程更高效。您可以處理數以萬計的同時連接。用線程做這件事有點困難。 – freakish 2013-04-08 06:10:02

相關問題