我有一個網站,它完全用php和基本的jquery ajax編碼。但是,當我瞭解到node.js/socket.io後,我幾乎重新記錄了所有使用nodejs和socket.io涉及ajax的實時內容。我有點困惑,我是否做了正確的事情。所以我的問題是何時是ajax比使用節點/套接字更優化的解決方案?何時使用node.js以及何時使用ajax?
回答
首先,你應該瞭解兩者的區別,答案會變得清晰。
AJAX用於簡單的異步請求。他們不需要設置節點服務器,幾乎在每個瀏覽器上都受支持。當您需要從服務器檢索一條信息時使用它們。然而,它們的開銷是通過HTTP發送的,因此它們需要是一個正確的HTTP請求/響應(增加了重量)。
WebSockets(可在Node.js/socket.io安裝程序中使用)用於頻繁訪問某些數據,或者需要與服務器建立實時持久連接。您可以建立套接字連接並將數據包從服務器發送到客戶端。與AJAX解決方案相比,這是輕量級的,但舊版瀏覽器不支持Websockets,並且您需要設置一個處理此類請求的服務器。
Socket.IO特別使用了一系列不同的技術,以便您可以獲得更好的瀏覽器支持:長輪詢,多部分流等。這允許您從服務器獲得「即時」反饋,但它仍然處於大多數情況下使用HTTP作爲協議。但是,如果它們可用(即由瀏覽器支持),它將使用WebSocket。
實際上在某些情況下,Node.js/Socket.io 將使用AJAX。
如果你不在線上遊戲,或者你不需要經常更新應用程序的狀態,我會建議使用AJAX而不是Node.js/socket.io安裝程序。
Nodejs適用於需要在客戶端和服務器之間保持持續連接的應用程序。基本上,如果你想發送客戶端和服務器nodejs之間的實時數據(聊天客戶端,遊戲等)是一個不錯的選擇。
使用nodejs這種持久連接不會阻止其他請求。許多其他語言如php(每個連接都啓動一個新的服務器進程)都會在這種情況下發生困難,並且您可能最終導致巨大的CPU負載。
如果實時數據具有儘可能低的延遲是目標,那麼將Socket.io和node.js放在一起是更好的選擇。只有在其他技術不被支持的情況下,它纔會回到長輪詢狀態,它的首選是使用網絡套接字。
當然,apache(使用php)和nodejs都可以做AJAX,這個問題應該是真的,這是否是您傳輸數據的正確方式,我們需要更多地瞭解您想要實現的目標!
- 1. 何時使用json以及何時使用jquery $ .ajax進行jsonp?
- 2. 何時使用==以及何時使用?
- 3. 何時使用belongsTo以及何時hasMany?
- 4. 何時使用jQuery.ajax以及何時使用jQuery.post?
- 5. 何時使用Apache Helix以及何時使用Apache Mesos
- 6. 何時使用Abstract Factory以及何時使用Factory Method?
- 7. 何時使用LEFT JOIN以及何時使用INNER JOIN?
- 8. PHP:何時使用Traits以及何時使用靜態方法?
- 9. 何時使用Value Formatter以及何時使用Value Resolver
- 10. 何時使用json文件以及何時使用js文件?
- 11. 何時使用:something =>'something'以及何時使用:something,'something'?
- 12. Elixir:何時使用'數字'以及何時使用'整數'
- 13. 何時使用Class.isInstance()以及何時使用instanceof運算符?
- 14. 何時使用Socket以及何時在Flex中使用XMLSocket?
- 15. 何時使用以及何時不使用Python 2.7_中的__init__
- 16. 何時使用undef_method以及何時使用remove_method?
- 17. 何時使用ICommand包裝RelayCommand以及何時使用Just ReplayCommand?
- 18. 何時使用Core Data以及何時使用Sqlite?
- 19. 何時使用數組以及何時使用單元陣列?
- 20. 何時使用DataTrigger以及何時使用Converter?
- 21. 何時使用Docker-Compose以及何時使用Docker-Swarm
- 22. 何時使用dup以及何時在Ruby中使用克隆?
- 23. 何時使用Gen_Fsm以及何時使用Gen_Server?
- 24. 何時使用佈局以及何時使用活動?
- 25. 何時使用IDataReader以及何時使用DataReader?
- 26. 何時使用uid以及何時在$ $ $ $中使用$ id
- 27. 何時使用ASP.NET驗證控件以及何時不使用?
- 28. 何時使用Pig以及何時使用Java for Mapreduce?
- 29. 何時使用Comparator以及何時在Java中使用Comparable?
- 30. 何時使用Twitter Bootstrap以及何時使用HTML5 Boilerplate?
這就像是問是否使用手術地毯或牙刷排球更爲理想。你需要讓你的術語正確。 –