私は単純な Java HTTP サーバーを作成しようとしています (まあ、私も))) ですが、スレッド プールと TCP セッションを制御する必要があります。起動時に必要なすべてのスレッドを事前に作成したいのですが、HTTP ハンドラーから TCP セッションを閉じる必要もあります。
まずはJettyを埋め込んでみました。Jetty 8 Server クラスにはsetThreadPoolメソッドがありますが、その ThreadPool は標準よりも強力ではありません (たとえば、Jetty のThreadPoolExecutorにはprestartAllCoreThreadsがありません(そして Java のThreadPoolExecutorを使用できませんか?)。
しかし、サーブレットハンドラーからTCPセッションを閉じることができるようです
HttpSession session = request.getSession();
session.invalidate();
しかし、Jetty 9サーバーには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 などのサードパーティ コンポーネントを使用しないことをお勧めします。
ありがとう。