Build codecov Maven Central GitHub license
ESA HttpServer is an asynchronous event-driven http server based on netty.
- Asynchronous request handing
- Http1/H2/H2cUpgrade
- Https
- HAProxy
- Epoll/NIO
- Chunked read/write
- Body aggregation
- Multipart
- Metrics
- more features...
<dependency> <groupId>io.esastack</groupId> <artifactId>httpserver</artifactId> <version>${mvn.version}</version> </dependency>
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();
- 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).
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
-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=.
- we set the value of IO threads to 8.
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 |