【发布时间】:2013-04-30 12:31:48
【问题描述】:
我正在尝试创建简单的 java HTTP 服务器(我也是))),但是我需要控制线程池和 TCP 会话。我想在启动时预先创建所有需要的线程,并且我需要从 HTTP 处理程序关闭 TCP 会话。
首先我尝试嵌入 Jetty。 Jetty 8 Server 类有 setThreadPool 方法,虽然它的 ThreadPool 不如标准强大(例如 Jetty 的 ThreadPoolExecutor 没有 prestartAllCoreThreads (我可以t 使用 Java 的 ThreadPoolExecutor,可以吗?)。
但似乎我可以通过
关闭来自 servlet 处理程序的 TCP 会话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 的会话控制结合起来?
在 Jetty 9 中控制 ThreadPool 也会很好。
如果可能的话,我也不希望使用像 Jetty 这样的第 3 方组件。
谢谢。
【问题讨论】:
-
“我宁愿不使用第 3 方组件”。您正在使用
com.sun.*,它不保证将来会出现在 JVM 中。 JVM 只承诺存在java.*和javax.*(Oracle,Java 的新所有者和看守者,一段时间以来一直在更改和删除对 Sun 的引用)。您使用com.sun.net.httpserver.HttpServer的愿望很可能会在未来满足第三方下载旧版jar 的需求。可能没有更新。 -
javax 是否包含自己的“标准”servlet 容器/http 服务器?
标签: java servlets jetty httpserver