Java 21中使用虚拟线程的简单Http Server


在具有虚拟线程的 Java 21 上运行的 JDK HTTP Server 和基准测试,项目点击标题

一个简单的 HTTP 服务器非常有用!对于大多数项目,使用现成的标准库 JDK HTTP 服务器。

此存储库中显示的代码和实验旨在演示基于以下 JDK 原语构建的简单、最小的 Java Web 服务器应用程序的功能:

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 = "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。