2013-01-03 59 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