FusionAuth/java-http:开源非阻塞 NIO Java HTTP Server


该项目的目标是在不使用任何库的情况下,用纯 Java 构建功能齐全的 HTTP 服务器和客户端。客户端和服务器将使用非阻塞 NIO 以提供可能的最高性能。

要将此库添加到您的项目中,您可以在 Maven POM 中包含此依赖项:

<dependency>
  <groupId>io.fusionauth</groupId>
  <artifactId>java-http</artifactId>
  <version>0.1.8</version>
</dependency>


创建服务器很简单:

import io.fusionauth.http.server.HTTPListenerConfiguration;
import io.fusionauth.http.server.HTTPServer;
import io.fusionauth.http.server.HTTPHandler;

public class Example {
  public static void main(String... args) {
    HTTPHandler handler = (req, res) -> {
      // Handler code goes here
    };

    HTTPServer server = new HTTPServer().withHandler(handler).withListener(new HTTPListenerConfiguration(4242));
    server.start();
   
// Use server
    server.close();
  }
}

高性能
具有出色的性能。以下是针对使用 Prime Framework MVC 的简单应用程序使用 FusionAuth 负载测试套件的一些基本指标。
负载测试配置设置为 10 个客户端,每个客户端有 500,000 个请求。客户端是 Restify,它是一个在底层使用 URLConnection 的 FusionAuth 库。所有服务器都是 HTTP,因此 TLS 不会引入任何额外的延迟。

服务器    RPS    每秒失败次数
java-http    63,216    0
Tomcat    51,351    0.103
Netty    540    1.818

Netty 和 Tomcat 似乎都遭受了非常大规模的缓冲和连接问题。无论配置如何,两台服务器总是开始出现大规模连接超时问题。java-http没有这些问题,因为它通过选择器处理连接的方式。连接不会备份,并且客户端连接池始终可以与 Keep-Alive 一起重复使用。