2011-05-11 69 views
0

我正在使用GWT RCP開發GWT中的Web應用程序構建。應用程序專爲使用redis消息傳遞的即時消息傳遞而設計。請求servlet在隊列中等待

在服務器上等待消息時,我在redis上訂閱該頻道時,所有內容都按計劃運行。雖然當服務器上等待請求的數量大於5時,第6個請求不會開始處理,而是一直處於等待狀態,直到處理完其中一個請求。我不確定這個問題是否出現在redis中(我正在使用jedis庫),因此我試圖直接調用currentThread來休眠,但它的行爲相同。

public class TestServiceImpl extends RemoteServiceServlet implements 
      TestService { 

    @Override 
    public void syncWait(Date time) { 
     try{ 
      Thread.currentThread().sleep(10000l); 
     }catch (Exception e) { 
      getLogger().error("sleep error", e); 
     } 
     return ; 
    } 
} 

這不僅僅是一個特定的servlet,當5個請求被打開時,6th甚至不會加載靜態內容。我在jety,glassfish和tomcat上試過。

我也嘗試更改glassfish中的線程池設置,我在200上設置了maxthread-count,但它沒有工作。

請問關於如何增加處理的會話數和每個服務器的請求數?

回答

0

爲此,您真的想使用servlet Comet實現和NIO連接器之一。我並不熟悉Glassfish或Jetty,但在Tomcat上,您可以使用APR(請參閱http://tomcat.apache.org/tomcat-6.0-doc/apr.html)和高級IO(請參閱http://tomcat.apache.org/tomcat-6.0-doc/aio.html)的組合來執行所需操作。

請注意,使用Tomcat的高級IO比標準的Servlet 2.5 api更復雜(且文檔較少)。我相信Resin,Tomcat 7和Glassfish支持Servlet 3.0規範,它也提供對類似功能的支持:你可能想看看這個。

+0

感謝您的回答,但我不確定是否需要Comet和NIO。彗星是爲了處理一致的請求。我不需要處理併發請求,我只是在服務器打開5個連接時開始處理請求時出現問題。這是彗星解決方案嗎? – LuiGi 2011-05-12 05:23:00

+0

通常在Servlet中的線程上調用'sleep'是一個壞主意:如果你有多個請求空閒,那麼你會需要Comet和NIO。就超過5個連接而言,您必須在某處存在配置缺陷,因爲您應該可以處理超過5個連接。 – Femi 2011-05-12 05:47:32