web前後端數據交互技術

第一階段:Form

web應用想要與服務器交互,必須提交一個表單(form)。服務器接收並處理該表單,然後返回一個全新的頁面。
缺點:前後兩個頁面需要更新的數據可能很少,這個過程可能傳輸了很多之前那個頁面已經有的數據,浪費了帶寬;爲了返回整個頁面,服務器可能需要爲頁面的其他內容構造數據,浪費服務器資源。

第二階段:Ajax(Asynchronous JavaScript and XML)

由JS腳本發送http請求,服務器只返回頁面需要更新的那部分數據,JS根據返回的數據刷新頁面的局部內容,而不是刷新整個頁面。
優點:網絡傳輸小、服務器負擔小
缺點:沒有解決對實時性的友好支持(比如聊天室或客服系統),如果需要持續地從服務器獲取數據,需要不斷請求

第三階段:Comet

一種hack技術,基於http長連接的“服務器推”的技術。實現方式有很多種,比如基於Ajax的長輪詢(long-polling)、封裝好的Comet4J等。
比較簡單的是基於Ajax的長輪詢:web應用發出Ajax請求,服務器收到請求後,如果有數據就即刻返回,如果沒數據,會等待一段時間(比如定時20秒),在等待的時間內,如果有數據就返回,如果一直沒數據,則timeout的時候返回。web應用收到服務器的返回後,處理數據、更新頁面,再繼續請求。服務器在發送完數據到接收到一個新請求之前,如果有數據需要發送,則先緩存起來,等待接到下一次請求後再發送。
優點:基本解決了實時性的問題
缺點:服務器需要阻塞線程等待數據,如果連接請求多的話,得考慮使用複雜的技術釋放線程給其他請求使用,不然可能會拖死服務器。需要客戶端和服務器端協調好才能正常工作。

第四階段:Websocket

html5標準中的一種全雙工通信規範,基於TCP協議,與http協議兼容,但不是http協議的一部分。
web應用(客戶端)先發起一個Handshake請求,服務器應答之後,就可以雙向交換數據了。
通信的兩方都可以發起關閉的請求(通過發送一個Closing Handshake),對方收到請求後,回覆一個相同的數據包,就關閉通信通道了。
優點:數據傳輸量極少、實時性好。

PS. 此外,雙向通信還可以通過flash的socket和xmlsocket實現。但它不屬於某一個web規範。

注:本文轉自轉自Clement-Xu的csdn博客

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章