2013-05-28 53 views
5

我有一個網站,它完全用php和基本的jquery ajax編碼。但是,當我瞭解到node.js/socket.io後,我幾乎重新記錄了所有使用nodejs和socket.io涉及ajax的實時內容。我有點困惑,我是否做了正確的事情。所以我的問題是何時是ajax比使用節點/套接字更優化的解決方案?何時使用node.js以及何時使用ajax?

+6

這就像是問是否使用手術地毯或牙刷排球更爲理想。你需要讓你的術語正確。 –

回答

8

首先,你應該瞭解兩者的區別,答案會變得清晰。

AJAX用於簡單的異步請求。他們不需要設置節點服務器,幾乎在每個瀏覽器上都受支持。當您需要從服務器檢索一條信息時使用它們。然而,它們的開銷是通過HTTP發送的,因此它們需要是一個正確的HTTP請求/響應(增加了重量)。

WebSockets(可在Node.js/socket.io安裝程序中使用)用於頻繁訪問某些數據,或者需要與服務器建立實時持久連接。您可以建立套接字連接並將數據包從服務器發送到客戶端。與AJAX解決方案相比,這是輕量級的,但舊版瀏覽器不支持Websockets,並且您需要設置一個處理此類請求的服務器。

Socket.IO特別使用了一系列不同的技術,以便您可以獲得更好的瀏覽器支持:長輪詢,多部分流等。這允許您從服務器獲得「即時」反饋,但它仍然處於大多數情況下使用HTTP作爲協議。但是,如果它們可用(即由瀏覽器支持),它將使用WebSocket。

實際上在某些情況下,Node.js/Socket.io 將使用AJAX

如果你不在線上遊戲,或者你不需要經常更新應用程序的狀態,我會建議使用AJAX而不是Node.js/socket.io安裝程序。

+1

+1很好的解釋。希望你可以擴大一點 – samayo

+1

但是每次連接我的應用程序與服務器apache分配單獨的線程給他們每個人,因此消耗了大量的資源,目前我已經設置了兩個Apache/nodejs。我的意思是,如果我每20秒使用ajax更新我的新聞源或填充彈出窗口,是否會佔用大量資源? – AnuragD

+1

你在第二段描述的是WebSockets,而不是SocketIO。SocketIO提供* web socket *支持,使用當前瀏覽器支持的任何傳輸;無論是websocket,iframe,長時間投票甚至閃光。 – Matt

3

Nodejs適用於需要在客戶端和服務器之間保持持續連接的應用程序。基本上,如果你想發送客戶端和服務器nodejs之間的實時數據(聊天客戶端,遊戲等)是一個不錯的選擇。

使用nodejs這種持久連接不會阻止其他請求。許多其他語言如php(每個連接都啓動一個新的服務器進程)都會在這種情況下發生困難,並且您可能最終導致巨大的CPU負載。

如果實時數據具有儘可能低的延遲是目標,那麼將Socket.io和node.js放在一起是更好的選擇。只有在其他技術不被支持的情況下,它纔會回到長輪詢狀態,它的首選是使用網絡套接字。

當然,apache(使用php)和nodejs都可以做AJAX,這個問題應該是真的,這是否是您傳輸數據的正確方式,我們需要更多地瞭解您想要實現的目標!

相關問題