2013-01-03 63 views
1

在我的項目中,我需要創建一個能夠改變流量的代理服務器。主要問題是擁有不同的優先級隊列,這將提供對更多服務器的訪問。jetty continuation - 暫停的請求 - 資源

我的想法是使用Jetty的異步功能 - 繼續。在Continuation中,可以選擇暫停請求並釋放線程。然後我的請求可以排隊。

我主要關注的是資源。 Jetty中「暫停」的請求會發生什麼情況?他們還有任何線程連接? 在我的情況比較多的請求可能被排隊和方法從Tomcat「每個請求線程」是不是對我很好的解決方案......

回答

0

您可能希望與org.eclipse.jetty.servlets.ProxyServlet開始,然後看看如何擴展它,類似BalancerServlet並且從那裏出發。它已經有許多可以開始的異步/繼續功能。

看看public void service(ServletRequest req, ServletResponse res)如何使用Continuations的方法。

+0

非常感謝您的回答。 我搜索了更多一點,事實證明Jetty的最新版本依賴於Servlet 3.0實現。這意味着他們使用方法startAsync掛起請求的執行,釋放RequestThread並啓動另一個WorkingThread。它可以在[link](http://stackoverflow.com/questions/3810448/servlet-3-0-asynchronous)中看到。它不能解決我的問題,因爲我需要暫時存儲請求(並釋放線程)。 通常我會看到一個選項是像Netty框架這樣的事件驅動方法。 – tRun

+0

也支持Servlet 3.0異步的延續。知道HTTP請求僅僅是掛起的,一旦startAsync()被調用,線程處理它返回到線程池,可以有[0..n]工作線程來處理它。 (請注意,如果有0個線程處理它,客戶端將看到超時) –

+0

這是問題所在。 HTTP請求被暫停 - 這意味着會有另一個消耗資源的線程。例如。 我想暫停/存儲100個HTTP請求。然後,它會消耗100個線程,這些線程幾乎無所作爲 - 只是在等待。我需要存儲這些請求,而不是消耗這麼多資源。 – tRun