Java 21中使用虛擬執行緒的簡單Http Server

banq發表於2024-02-27


在具有虛擬執行緒的 Java 21 上執行的 JDK HTTP Server 和基準測試,專案點選標題

一個簡單的 HTTP 伺服器非常有用!對於大多數專案,使用現成的標準庫 JDK HTTP 伺服器。

此儲存庫中顯示的程式碼和實驗旨在演示基於以下 JDK 原語構建的簡單、最小的 Java Web 伺服器應用程式的功能:

  • Java 21
  • Virtual threads
  • JDK HTTP server
  • JDK HTTP client

Hello
Hello是一個啟動JDK HTTP 伺服器的簡單應用程式。
它使用“hello world”純文字響應來響應每個 HTTP 請求:

import com.sun.net.httpserver.HttpServer;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.util.concurrent.Executors;

public class Hello {

    public static void main(String[] args) throws IOException {
        var body = <font>"hello world".getBytes();
        var server = HttpServer.create(new InetSocketAddress(8080), 0);
        server.setExecutor(Executors.newVirtualThreadPerTaskExecutor());
        server.createContext(
"/").setHandler(exchange -> {
            exchange.sendResponseHeaders(200, body.length);
            try (var os = exchange.getResponseBody()) {
                os.write(body);
            }
        });
        server.start();
        System.out.println(
"ready");
    }

}

它使用每個任務虛擬執行緒執行器。

./httpsrvimg/bin/java -Dsun.net.httpserver.nodelay=true -m httpsrv/httpsrv.Hello

基準測試

  • JDK HTTP 伺服器每秒處理 100,000 個請求,
  • JVM啟動時間為 100 毫秒,模組化執行時映像為 50 MB。
  • GraalVM 本機映像的啟動時間為 3 毫秒,可執行檔案為 18 MB。 

相關文章