Web實時更新客戶端數據


1        輪詢方式實現客戶端數據及時更新

 

在基於Web的即時通信、股票行情這樣的系統中,需要客戶端能夠及時更新內容。由於B/S架構的特性(Http連接是無狀態連接, 即服務器處理完客戶的請求,並收到客戶的應答后即斷開連接),最簡單的方式是通過客戶端輪詢的方式實現客戶端刷新。

較早是將一個隱藏的iframe嵌在網頁中,通過該iframe不斷刷新來獲取最新內容,現在通過Ajax來實現,通過每隔一段時間發起Http請求實現數據更新,並可以實現異步更新。輪詢方式顯而易見的缺點就是會造成服務器較大負載。

 

Note:傳統的JavaApplet和ActiveX通過Socket通信可以實現數據的及時更新。

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/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM