2013-10-16 21 views
1

我正在開發基於netty version 4的分析系統和基於tomcat的web客戶端應用程序。如何通過HTTP請求在HTML頁面中顯示異步結果?

網絡應用程序接受用戶的輸入,然後將其發送到分析機。最後在HTML頁面中打印響應。

這是在發送用戶輸入到分析節點的servlet代碼:

protected void doGet(HttpServletRequest request, 
      HttpServletResponse response) throws ServletException, IOException { 
String input = request.getParameter("input"); 
Channel ch = pool.borrowObject(); 
Protocol.Builder builder = Protocol.newBuilder().setInput(input); 
ch.writeAndFlush(builder.build()); 
} 

Netty的以異步方式工作,所以HTTP請求發送之後結束。

這是代碼響應處理:

@Override 
    protected void channelRead0(ChannelHandlerContext ctx, Protocol response) 
      throws Exception { 
pool.returnObject(ctx.channel()); 
//How could I code here to display response to the HTML page that user requested? 
} 

我一直在這裏奮鬥了幾個星期。我試圖使用公共的安全隊列來使http請求在那裏等待,直到從隊列中獲得響應。但是這使得整個請求變得同步。

任何人都可以告訴如何做到這一點?非常感謝!

+1

Twitter的欺騙是包裝爲網狀,這是否(及以上)。大部分編寫finagle客戶端的例子都在scala中,但我知道它也可以用於java。您可以從這裏開始:https://blog.twitter.com/2011/finagle-protocol-agnostic-rpc-system – eSniff

+0

謝謝。我會看看。 – Michael

+0

@ norman-maurer如果你有時間,你可以看看這個嗎?非常感激。 – Michael

回答

2

這裏的問題是默認的servlet請求生命週期是同步的。要在servlet容器中解決這個問題的唯一方法是使用servlet 3.0異步請求處理。通過這種方式,您可以將請求傳遞給Netty並返回,然後在到達時異步地寫入響應。

一些鏈接,以幫助您開始

Java Servlet 3.0 Asynchronous Support

How To Use Asynchronous Servlets To Improve Performance

+0

謝謝!你指出了做這件事的正確方法。 – Michael