Thanks Bill n Antoine ..Here is the updated one : ( tried without Kafka API ) .public class HelloWorldServer {public static void main(final String[] args) {Undertow server = Undertow.builder().addHttpListener(8009, "localhost").setHandler(new HttpHandler() { @Overridepublic void handleRequest(final HttpServerExchange exchange) throws Exception {if (exchange.getRequestMethod().equals(Methods.POST)) { exchange.getRequestReceiver().receiveFullString(new Receiver.FullStringCallback() { @Overridepublic void handle(HttpServerExchange exchange, String message) {System.out.println(" Received String ==> "+message);exchange.getResponseSender().send(message); }});} else {exchange.getResponseHeaders().put(Headers.CONTENT_TYPE, "text/plain"); exchange.getResponseSender().send("FAILURE"); }}}).build();server.start();}}Oops seems to no improvement :Running 1m test @ http://localhost:8009/100 threads and 1000 connectionsThread Stats Avg Stdev Max +/- StdevLatency 25.79ms 22.18ms 289.48ms 67.66%Req/Sec 437.76 61.71 2.30k 80.26%Latency Distribution50% 22.60ms75% 37.83ms90% 55.32ms99% 90.47ms2625607 requests in 1.00m, 2.76GB readRequests/sec: 43688.42Transfer/sec: 47.08MB:-( :-( ..--SenthilOn Fri, Jun 23, 2017 at 1:47 AM, Antoine Girard <antoine.girard@ymail.com> wrote:You can use the Receiver API, specifically for that purpose.On the exchange, call: getRequestReceiver();You will get a receiver object:On the receiver you can call: receiveFullString, you have to pass it a callback that will be called when the whole body has been read.Please share your results when you test this further!Cheers,AntoineOn Thu, Jun 22, 2017 at 8:27 PM, SenthilKumar K <senthilec566@gmail.com> wrote:______________________________Seems to Reading Request body is wrong , So what is the efficient way of reading request body in undertow ?--SenthilOn Thu, Jun 22, 2017 at 11:30 PM, SenthilKumar K <senthilec566@gmail.com> wrote:Hello Undertow Dev Team ,I have been working on the use case where i should create simple http server to serve 1.5 Million Requests per Second per Instance ..Here is the benchmark result of Undertow :Running 1m test @ http://127.0.0.1:8009/20 threads and 40 connectionsThread Stats Avg Stdev Max +/- StdevLatency 2.51ms 10.75ms 282.22ms 99.28%Req/Sec 1.12k 316.65 1.96k 54.50%Latency Distribution50% 1.43ms75% 2.38ms90% 2.90ms99% 10.45ms1328133 requests in 1.00m, 167.19MB readRequests/sec: 22127.92Transfer/sec: 2.79MBThis is less compared to other frameworks like Jetty and Netty .. But originally Undertow is high performant http server ..Hardware details:Xeon CPU E3-1270 v5 machine with 4 cores ( Clock 100 MHz, Capacity 4 GHz) , Memory : 32 G , Available memory 31 G.I would need Undertow experts to review the server code below and advice me on tuning to achieve my goal( ~1.5 Million requests/sec ).Server :Undertow server = Undertow.builder().addHttpListener(8009, "localhost").setHandler(new Handler()).build();server.start();Handler.Javafinal Pooled<ByteBuffer> pooledByteBuffer =exchange.getConnection().getBufferPool().allocate(); final ByteBuffer byteBuffer = pooledByteBuffer.getResource(); byteBuffer.clear();exchange.getRequestChannel().read(byteBuffer); int pos = byteBuffer.position();byteBuffer.rewind();byte[] bytes = new byte[pos];byteBuffer.get(bytes);String requestBody = new String(bytes, Charset.forName("UTF-8") );byteBuffer.clear();pooledByteBuffer.free();final PostToKafka post2Kafka = new PostToKafka();try {post2Kafka.write2Kafka(requestBody); { This API can handle ~2 Millions events per sec } } catch (Exception e) {e.printStackTrace();}exchange.getResponseHeaders().put(Headers.CONTENT_TYPE, "text/plain"); exchange.getResponseSender().send("SUCCESS"); --Senthil_________________
undertow-dev mailing list
undertow-dev@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/undertow-dev