我正在尝试创建简单的 java HTTP 服务器(嗯,我也是))),但是我需要控制线程池和 TCP 会话。我想在启动时预先创建所有需要的线程,并且我需要从 HTTP 处理程序关闭 TCP 会话。
首先,我尝试嵌入 Jetty。Jetty 8 Server 类有setThreadPool方法,尽管它的 ThreadPool 不如标准强大(例如 Jetty 的ThreadPoolExecutor没有prestartAllCoreThreads(我不能使用 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 方组件。
谢谢。