java comet是什么,讓我們一起了解一下?
comet是基于HTTP長連接的“服務器推”技術,是一種新的Web應用架構?;贘ava的成熟的服務器推送框架有 DWR ,另外comet的應用主要體現在股票系統和實時通訊。
Comet有以下兩種實現方式:
1、長輪詢(long-polling):用JS發送Ajax請求,但是服務器不會立馬響應,直到服務器有消息給客戶端時再響應,響應完成后連接關閉,客戶端立即再次發送請求,等待響應。
2、流(streaming):和上面long-polling不同的是,服務器發完消息后,不會關閉連接,而是保持HTTP連接繼續等待下一條消息。這樣客戶端不用每次收到消息連接關閉后再次請求。
這種方式的原理是HTTP協議響應頭的一個Header:Transfer-Encoding: chunked。普通的HTTP響應頭中會有Content-Length表示整個響應的字節大小,瀏覽器接收到所有的響應數據才會加載內容。而設置Transfer-Encoding: chunked后表示響應大小不固定,瀏覽器接收到一點響應數據就加載一點?;诹鞯腃omet后臺實現是一樣的,但是前端會有幾種不同的方式:iframe流和針對FireFox的方式。
那么實際操作中,Comet是如何實現的?(以長輪詢為例)
前端頁面:
后臺Servlet:
public?class?CometServlet?extends?HttpServlet?{ @Override public?void?doGet(HttpServletRequest?request,?HttpServletResponse?response)?throws?IOException?{ //?這里用Thread.sleep來模擬comet,相當于每隔5秒服務器向客戶端推送一條消息 try?{ Thread.sleep(5000); }?catch?(InterruptedException?e)?{ e.printStackTrace(); } PrintWriter?out?=?response.getWriter(); out.println("helloworld
"); }
在瀏覽器中打開html頁面,可以看到每隔5秒服務器向客戶端推送一個helloworld字符串。而接收到字符串HTTP連接就斷開了,然后Ajax再立即發出請求等待服務器的下次響應。?
以上就是小編今天的分享了,希望可以幫助到大家。