私のアプリケーションは、自動化と回帰テストのために Android UI でボタンを押してテキストを入力する代わりに nanoHTTPD を使用することです。現在、メインの UI スレッドとカスタマイズされた nanoHTTPD を別のスレッドで実行しています。各 HTTP リクエストが UI スレッドで非常に迅速に処理されることを考慮してください。着信リクエストごとにnanoHTTPDが新しいスレッドを開始しないように強制できれば、モデルを簡素化できると思います。私のユースケースでは、ブロッキング I/O モデルはまったく気にしません。スレッド化にはプラグイン可能な戦略があることがわかりました。一度に 1 つの Web リクエストのみがアクティブになるように以下を変更できますか (ブロッキング モデル)。
public static class DefaultAsyncRunner implements AsyncRunner {
private long requestCount;
@Override
public void exec(Runnable code) {
++requestCount;
Thread t = new Thread(code);
t.setDaemon(true);
t.setName("NanoHttpd Request Processor (#" + requestCount + ")");
t.start();
}
}
おそらくもっと精巧なメッセージ キューを作成することもできますが、1 つのスレッドで nanoHTTPD を "ダビングダウン" するのが最も簡単に思えます。