來自:http://www.pussor.com/?p=3
官網(wǎng):http://www.pushlets.com/
Ajax等Web 2.0技術(shù)的廣泛應(yīng)用,推動了C/S向B/S的轉(zhuǎn)變,如今很多應(yīng)用如監(jiān)控、即時通信等系統(tǒng)都需要實時同步服務(wù)器端和客戶端的數(shù)據(jù)更新。Comet在這種需求下應(yīng)運而生,本文簡單介紹了基于Comet的開源框架Pushlet。
Comet基礎(chǔ)
Comet 是一個用于描述客戶端和服務(wù)器之間的交互的術(shù)語,即使用長期保持的 HTTP 連接來在連接保持暢通的情況下支持客戶端和服務(wù)器間的事件驅(qū)動的通信。
—引用自“Comet的誘惑”
傳統(tǒng)的web系統(tǒng)的工作流程是客戶端發(fā)出請求,服務(wù)器端進行響應(yīng),而Comet則是在現(xiàn)有技術(shù)的基礎(chǔ)上,實現(xiàn)服務(wù)器數(shù)據(jù)、事件等快速PUSH到客戶端,所以會出現(xiàn)一個術(shù)語”服務(wù)器推“技術(shù)。
PUSH實現(xiàn)方式
JSP/SERVLET PUSH
原理:
利用JSP/SERVEL技術(shù),在不關(guān)閉HTTP流的情況下PUSH數(shù)據(jù)到客戶端瀏覽器;
實現(xiàn):
基于 AJAX 的長輪詢(long-polling)方式
AJAX 的出現(xiàn)使得 JavaScript 可以調(diào)用 XMLHttpRequest 對象發(fā)出 HTTP 請求,JavaScript 響應(yīng)處理函數(shù)根據(jù)服務(wù)器返回的信息對 HTML 頁面的顯示進行更新。使用 AJAX 實現(xiàn)“服務(wù)器推”與傳統(tǒng)的 AJAX 應(yīng)用不同之處在于:
- 服務(wù)器端會阻塞請求直到有數(shù)據(jù)傳遞或超時才返回。
- 客戶端 JavaScript 響應(yīng)處理函數(shù)會在處理完服務(wù)器返回的信息后,再次發(fā)出請求,重新建立連接。
- 當(dāng)客戶端處理接收的數(shù)據(jù)、重新建立連接時,服務(wù)器端可能有新的數(shù)據(jù)到達;這些信息會被服務(wù)器端保存直到客戶端重 新建立連接,客戶端會一次把當(dāng)前服務(wù)器端所有的信息取回。
Pushlet實例
以Pushlet中的ping案例來進行分析:
- 新建一個Web項目取名ping,并導(dǎo)入Pushlet的jar包;
- 在src目錄下配置sources.properties、pushlet.properties文件;
- webroot目錄下導(dǎo)入js-pushlet-client.js,js-pushlet-net.html;
- 新建TestEventPullSources.java;
- 新建index.html,引入js-pushlet-client.js;
- 新建pingok.jsp;
- 修改web.xml加上pushlet的servlet
- 打包、部署ping項目;