1 輪詢方式實現客戶端數據及時更新
在基於Web的即時通信、股票行情這樣的系統中,需要客戶端能夠及時更新內容。由於B/S架構的特性(Http連接是無狀態連接, 即服務器處理完客戶的請求,並收到客戶的應答后即斷開連接),最簡單的方式是通過客戶端輪詢的方式實現客戶端刷新。
較早是將一個隱藏的iframe嵌在網頁中,通過該iframe不斷刷新來獲取最新內容,現在通過Ajax來實現,通過每隔一段時間發起Http請求實現數據更新,並可以實現異步更新。輪詢方式顯而易見的缺點就是會造成服務器較大負載。
2 Comet 服務器推送數據到客戶端
現在還有一種技術是Comet,Comet其實就是許多年前流行的CGI聊天室所用的Server Push技術。這個方法一開始是由Client對Server建立連接,但是Server在建立連接后,送出的header中要把content-type設為“multipart/x-mixed-replace”,就是server之后要分或多次返回多片段數據,讓Client保持連接,並且把每次拿到的數據取代之前的數據片段。接着client就只要在保持不斷的連接上等着server發送的數據就好了。Comet利用這種特性,加上Ajax能異步更新數據,變成開發rich client非常重要的技術。
但Comet不像Ajax那樣容易用到現成的http server上,它需要server上有適當的程式配合。[2]參考文獻[1] 提供了使用Comet的代碼片段。
3 HTML 5的數據更新
HTML5本身提供了對即時數據更新的支持。
Html5中的Server-Sent 事件用來實現網頁自動獲取來自服務器的更新,Server-Sent是單方面的消息傳遞。通過服務器發送事件,更新能夠自動到達,從而實現微博更新、賽事結果這樣的應用。
HTML5的Web Socket 使瀏覽器和服務器之間可以建立一個基於 TCP 連接的雙向通道。Web 開發人員可以非常方便地使用 WebSocket 構建實時 web 應用。
4 參考
[1] Comet 服務器“推”技術,實現web服務器“主動”向客戶端發送數據。
http://www.360doc.com/content/11/0617/16/597197_127627804.shtml
[2] Comet(Server Push) on Turbogears(2)
blog.vgod.tw/tag/server-push
[3] HTML5服務器發送事件.
http://www.w3school.com.cn/html5/html_5_serversentevents.asp
[4] 使用 HTML5 WebSocket 構建實時 Web 應用.
http://www.ibm.com/developerworks/cn/web/1112_huangxa_websocket/
