MCPcopy Index your code
hub / github.com/esastack/esa-httpserver

github.com/esastack/esa-httpserver @v0.1.1

Chat with this repo
repository ↗ · DeepWiki ↗ · release v0.1.1 ↗ · + Follow
1,113 symbols 6,071 edges 106 files 132 documented · 12%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

ESA HttpServer

Build codecov Maven Central GitHub license

ESA HttpServer is an asynchronous event-driven http server based on netty.

Features

  • Asynchronous request handing
  • Http1/H2/H2cUpgrade
  • Https
  • HAProxy
  • Epoll/NIO
  • Chunked read/write
  • Body aggregation
  • Multipart
  • Metrics
  • more features...

Maven Dependency

<dependency>
    <groupId>io.esastack</groupId>
    <artifactId>httpserver</artifactId>
    <version>${mvn.version}</version>
</dependency>

Quick Start

HttpServer.create()
        .handle(req -> {
            req.onData(buf -> {
                // handle http content 
            });
            req.onEnd(p -> {
                req.response()
                        .setStatus(200)
                        .end("Hello ESA Http Server!".getBytes());
                return p.setSuccess(null);
            });
        })
        .listen(8080)
        .awaitUninterruptibly();

Performance

Test cases

  • We built an echo server by ESA HttpServer and used a http client to do the requests for RPS testing with different bytes payload(16B, 128B, 512B, 1KB, 4KB, 10KB)
  • Also we used origin netty to build a server which is same with above for RPS testing (uses the HttpServerCodec, HttpObjectAggregator handlers directly).

Hardware Used

We used the following software for the testing:

  • wrk4.1.0

  • OS CPU Mem(G)
    server centos:6.9-1.2.5(docker) 4 8
    client centos:7.6-1.3.0(docker) 16 3

JVM Options

-server -Xms3072m -Xmx3072m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m -XX:+UseConcMarkSweepGC -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 -XX:+PrintTenuringDistribution -XX:+PrintGCDateStamps -XX:+PrintGCDetails -Xloggc:logs/gc-${appName}-%t.log -XX:NumberOfGCLogFiles=20 -XX:GCLogFileSize=480M -XX:+UseGCLogFileRotation -XX:HeapDumpPath=.

Server Options

  • we set the value of IO threads to 8.

RPS

16B 128B 512B 1KB 4KB 10KB
Netty 133272.34 132818.53 132390.78 127366.28 85408.7 49798.84
ESA HttpServer 142063.99 139608.23 139646.04 140159.5 92767.53 53534.21

Extension points exported contracts — how you extend this code

Transport (Interface)
An interface defines the traits of transport, such as NIO, Epoll. [4 implementers]
httpserver/src/main/java/io/esastack/httpserver/transport/Transport.java
OpenSslSessionMetrics (Interface)
Metrics of io.netty.handler.ssl.OpenSslSessionStats [4 implementers]
httpserver/src/main/java/io/esastack/httpserver/metrics/OpenSslSessionMetrics.java
MetricsReporter (Interface)
Interface defines events that may be used in metrics. [4 implementers]
httpserver/src/main/java/io/esastack/httpserver/metrics/impl/MetricsReporter.java
RequestHandle (Interface)
An interface defines a http server Request and provides the guiding to handle the coming request. When the { [4 implementers]
httpserver/src/main/java/io/esastack/httpserver/core/RequestHandle.java
Aggregation (Interface)
An interface defines the body and trailing headers part of a http request. [4 implementers]
httpserver/src/main/java/io/esastack/httpserver/core/Aggregation.java

Core symbols most depended-on inside this repo

response
called by 156
httpserver/src/main/java/io/esastack/httpserver/core/Request.java
connection
called by 133
httpserver/src/main/java/io/esastack/httpserver/metrics/Metrics.java
toString
called by 128
httpserver/src/main/java/io/esastack/httpserver/impl/BaseResponse.java
end
called by 116
httpserver/src/main/java/io/esastack/httpserver/core/Response.java
headers
called by 108
httpserver/src/main/java/io/esastack/httpserver/core/Response.java
write
called by 92
httpserver/src/main/java/io/esastack/httpserver/core/Response.java
metrics
called by 90
httpserver/src/main/java/io/esastack/httpserver/impl/ServerRuntime.java
ctx
called by 85
httpserver/src/main/java/io/esastack/httpserver/impl/BaseResponse.java

Shape

Method 987
Class 111
Interface 14
Enum 1

Languages

Java100%

Modules by API surface

httpserver/src/test/java/io/esastack/httpserver/impl/Http2FrameInboundWriter.java47 symbols
httpserver/src/main/java/io/esastack/httpserver/ServerOptionsConfigure.java41 symbols
httpserver/src/main/java/io/esastack/httpserver/NetOptions.java40 symbols
httpserver/src/main/java/io/esastack/httpserver/ServerOptions.java34 symbols
httpserver/src/test/java/io/esastack/httpserver/impl/BaseResponseTest.java32 symbols
httpserver/src/main/java/io/esastack/httpserver/impl/BaseRequestHandle.java31 symbols
httpserver/src/main/java/io/esastack/httpserver/metrics/impl/OpenSslSessionMetricsImpl.java29 symbols
httpserver/src/main/java/io/esastack/httpserver/impl/HttpServerImpl.java29 symbols
httpserver/src/main/java/io/esastack/httpserver/metrics/impl/ConnectionMetricsImpl.java28 symbols
httpserver/src/test/java/io/esastack/httpserver/impl/BaseRequestHandleTest.java27 symbols
httpserver/src/main/java/io/esastack/httpserver/impl/BaseResponse.java27 symbols
httpserver/src/test/java/io/esastack/httpserver/impl/Http2HandlerTest.java24 symbols

For agents

$ claude mcp add esa-httpserver \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact