2012-07-03 126 views
1

我剛剛瞭解了彗星模式(長輪詢),並非常好奇地實現了一個Tomcat6作爲容器的簡單示例。 我在這裏要做的是 - 我打算調用一個生成1到20之間的隨機數的servlet,並基於該隨機數在響應客戶端之前等待該秒數。使用Tomcat6實現彗星模式

例如:如果生成的隨機數是10,那麼servlet應該等待10秒才發送響應。

這裏是我的servlet實現CometProcessor

public class RandomNumberGenerator extends HttpServlet implements CometProcessor { 

doPost方法:

 PrintWriter out =response.getWriter(); 
     Random r = new Random(); 
     int randomInt = r.nextInt(20) + 1; 
     out.print(randomInt); 
     out.flush(); 
     out.close(); 

現在,我實現了CometProcessor我有一個事件方法:

@Override 
    public void event(CometEvent event) throws IOException, ServletException { 

    } 

什麼我想不出是什麼,我該怎麼做這個event方法來做我想做的事情。

我這裏知道的是,他們將一些事件,我可以像這樣的方法內把手:BRGIN,READ,END,ERROR

我應該使用像這樣的活動?

if (event.getEventType() == CometEvent.EventType.BEGIN) { 
    event.setTimeout(numberOfSecondToWait); 
} 

我完全困惑爲this教程對我來說似乎有點複雜。

回答

2

我最近寫了一篇關於WebSockets and Comet的博客文章,並要求發明者'Comet'提供他的意見。

總之,Alex說WebSockets replace Comet

因此,雖然人們仍在使用Comet,但它最終將被WebSockets取代,因爲它們是專門爲解決彗星解決方案闖入的問題而創建的。

我建議你將焦點轉移到WebSockets。

+1

所有瀏覽器都支持WebSockets嗎? – JAVAGeek

+1

瀏覽器支持的當前狀態可以在這裏看到:http://caniuse.com/#search=websockets當WebSocket不可用時的標準做法是使用[web-socket-js polyfill](https: //github.com/pusher/web-socket-js)。對於較老的瀏覽器,您可以查看基於Comet的後備或簡單地拖放到標準輪詢。後者並不理想,但它可能是我會走的路 - 或逐步增強我的應用程序,如果瀏覽器不支持WebSockets,那麼用戶將獲得減少的功能。 – leggetter

+1

今天我使用DWR實現了彗星,並且按照預期的那樣運行':)'。那麼,我一定會嘗試網絡套接字,因爲它看起來很有趣。謝謝 ! – JAVAGeek