標籤:
1.什麼是反向ajax?
傳統的ajax的困惑?
新需求--當伺服器端資料發生變化時,用戶端(瀏覽器端)如何即時得到通知呢?
找一些實際的案例:客服系統、線上聊天
這類應用,有一個顯著的特點:
資料並不是單向的,原來的資料,都是從瀏覽器端向伺服器端發起請求,然後擷取資料。
現在的需求發生變化了,有時候,資料是從伺服器端 推送 到瀏覽器端。
前面所有的http請求/響應模型都是基於單向的,包括ajax。
從服務端向瀏覽器端推送資料的這種ajax應用,稱之為反向ajax。
2.常見解決方案
有以下三種:
*l HTTP輪詢
*l Comet (長輪詢/iframe)
*l websockets
輪詢的優缺點
優點:就是實現起來比較簡單
缺點:有大量的無用的請求,造成效能的損失,包括頻寬的浪費。由於是有固定的時間間隔,所以造成即時性不夠。
不管是輪詢還是Comet,都不是最好的解決方案
最好的解決方案是web socket。
WebSockets是HTML5的一種新通訊協定,它實現了瀏覽器與伺服器之間的雙向通訊。有了websocket,我們就可以實現互發。
Websockets只是一個協議,我們需要去實現這些協議。目前有很多好的方案,最好的就是socket.io。
3.Socket.io
Socket.io是一個完全由JavaScript實現、基於Node.js、支援WebSocket的協議用於即時通訊、跨平台的開源架構,它包括了用戶端的JavaScript 和伺服器端的Node.js。
由於是雙向通訊,可以在瀏覽器端向伺服器端發送請求,也可以從伺服器端向瀏覽器端發送請求。包括兩個部分,用戶端有一個socket.io相關的對象,同理, 在伺服器端也有一個socket.io相關的對象。
Socket.io設計的目標是構建能夠在不同瀏覽器和行動裝置上良好啟動並執行即時應用,如即時分析系統、二進位流資料處理應用、線上聊天室、線上客服系統、評 論系統、WebIM等。
4.Socket.io基本使用
可以參考官網:http://socket.io/docs/
注意:
l 要以伺服器的方式來訪問用戶端頁面
l 引入外部js之後,需要對外部靜態資源的解析
反向Ajax之Socket.io