java - Jetty 线程池和 sun.HttpServer session

标签 java servlets jetty httpserver

我正在尝试创建简单的 java HTTP 服务器(好吧,我也是))),但是我需要控制线程池和 TCP session 。我想在启动时预先创建所有需要的线程,并且还需要从 HTTP 处理程序关闭 TCP session 。

首先我尝试嵌入 Jetty。 Jetty 8 Server 类有 setThreadPool 方法,尽管它的 ThreadPool 不如标准强大(例如 Jetty 的 ThreadPoolExecutor 没有 prestartAllCoreThreads (我可以'不能使用 Java 的 ThreadPoolExecutor,可以吗?)。

但似乎我可以通过

从 servlet 处理程序关闭 TCP session
HttpSession session = request.getSession();
session.invalidate(); 

但是 Jetty 9 Server 现在根本没有 setThreadPool 方法。它迁移到其他地方了吗?

第二我尝试使用com.sun.net.httpserver.HttpServer。它与线程池配合得很好

ThreadPoolExecutor thp = (ThreadPoolExecutor) Executors.newCachedThreadPool();

thp.setMaximumPoolSize(1000);
thp.setCorePoolSize(1000);
thp.prestartAllCoreThreads();

server.setExecutor(thp);

但无法控制 TCP 连接关闭(HttpExchange 类不提供任何方法)。

所以实际上我需要以某种方式结合 Sun HttpServer 的线程控制和 Jetty 的 session 控制?

在 Jetty 9 中控制 ThreadPool 也会很好。

此外,如果可能的话,我希望不要使用 Jetty 等第 3 方组件。

谢谢。

最佳答案

在 jetty-9 中,许多签名因服务器的连接方式而发生了变化。在拥有所有 getter 和 setter 的 leu 中,它被切换到更多基于构造函数,因此您应该找到在线程池中传递的能力。至于线程的预启动,请随时在 RT/Jetty 下的 bugs.eclipse.org 上打开该功能的错误,我们会看一下。

此外,我们在 git 中为 jetty-9 提供了 jetty-http-spi 实现,但我们尚未为其发布任何工件。我们为 7 号和 8 号准备了它们,我们只是试图根据要求它出现的请求来衡量是否值得在 jetty-9 上保留它们。那里的类​​扩展了你上面提到的 com.sun http 服务器,并允许你使用 jetty 代替捆绑在里面的服务器,所以这是另一个潜在的选择,尽管你仍然遇到我不知道的线程池线程启动问题乍一看,这并不是一个特别难以解决的问题。

关于java - Jetty 线程池和 sun.HttpServer session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16299981/

相关文章:

java - 我无法从命令行启动 jetty,它需要 Main-Class list 属性

Java-检查是否按下了控制键

java - 在 servlet 中加载 fcl 文件时出错

java - 如何在Java中获取负载均衡器后面的节点服务器IP

java - 如何运行jetty :run-exploded in maven but prevent from assembling war again?

java - 为什么jetty服务器在发送请求时不同意协议(protocol)?

java - 如何在 Jasper 中格式化间隔类型

java - 使用 SAX 在节点上运行转换

java - java中获取私有(private)类的对象

java - 经过漫长的等待后将文件发送给客户端