簡答
保持一個積極的WebSocket擁有成本,爲客戶端和服務器,阿賈克斯是否有一個成本只有一次,這取決於你用它做什麼。
長的答案
的WebSockets經常被誤解,因爲這個整體的「嘿,使用Ajax,會做!」。不,Websockets不能替代Ajax。他們可能會應用於相同的領域,但有些情況下使用Websocket是荒謬的。
我們來舉一個簡單的例子:在客戶端加載頁面後加載數據的動態頁面。很簡單,打一個Ajax電話。我們只需要一個方向,從服務器到客戶端。客戶端會詢問這些數據,服務器將把它們發送給客戶端,完成。你爲什麼要爲這樣的任務實現websockets?您不需要始終打開您的連接,您不需要客戶端不斷詢問服務器,也不需要服務器通知客戶端。連接將保持打開狀態,這會浪費資源,因爲要保持連接打開,您需要不斷檢查連接。
現在聊天應用程序的事情是完全不同的。您需要通過服務器通知您的客戶端,而不是強制客戶端每隔幾秒或幾毫秒詢問一次服務器是否有新問題。這是沒有意義的。
爲了更好地理解,請參閱兩個人。一個是服務器,一個是客戶端。 Ajax就像發送一封信一樣。客戶端發送一封信,服務器回覆另一封信。事實是,對於一個聊天應用程序,對話會是這樣的:
「嘿服務器,得到的東西對我來說
- 第
- 嘿服務器,得到的東西對我來說
-
號? - 嘿服務器,給我找點東西嗎?
- 是的,就在這裏。「
如果客戶端從未要求答案,服務器實際上不能發送一封信給客戶端。這是一個巨大的資源浪費。因爲對於每個Ajax請求,即使它被緩存,您也需要在服務器端進行操作。
現在我前面討論過使用Ajax加載數據的情況。想象一下,客戶端正在與服務器通話。保持連接活動有成本。它耗費電力,你必須付錢給你的運營商。現在,如果你只是想讓這個人告訴你三個字,你爲什麼還需要給某人打電話並讓他打電話一個小時?發送一封該死的信。
總而言之,Websockets並非完全取代Ajax!
有時你會需要 Ajax其中Websocket的使用是荒謬的。
編輯:上證所情況下
技術是不使用很廣泛,但它可能是有用的。正如其名稱所述,Server-Sent Events是從服務器到客戶端的單向推送。客戶端不需要任何請求,服務器只是發送數據。
簡而言之:
- 從客戶端單向:阿賈克斯
- 單向從服務器:SSE
- 雙向:WebSockets的
我相信這是正確的。在不需要雙向通信的應用程序中,服務器上的ajax請求會更容易。另外,請考慮當HTML5脫機持久性變爲可用時(與Websockets變得更加可用的時間基本相同),Web應用程序只會根據需要與服務器同步。 – badunk 2012-03-17 09:06:24