Browse Source

Update Undertow benchmarks

- Update to Undertow Alpha19
- Change to using the builder API to setup the server
- Add plantext test support
Stuart Douglas 12 years ago
parent
commit
319d9e550f

+ 2 - 2
undertow/README.md

@@ -3,10 +3,10 @@
 This is the undertow portion of a [benchmarking test suite](../) comparing a variety of web development platforms.
 This is the undertow portion of a [benchmarking test suite](../) comparing a variety of web development platforms.
 
 
 ### JSON Encoding Test
 ### JSON Encoding Test
-* [JSON test source](src/main/java/hello/HelloServerHandler.java)
+* [JSON test source](src/main/java/hello/HelloWebServer.java)
 
 
 ## Versions
 ## Versions
-Undertow 1.0.0.Alpha15 (https://github.com/undertow-io/)
+Undertow 1.0.0.Alpha19 (http://undertow.io)
 
 
 ## Test URLs
 ## Test URLs
 
 

+ 1 - 0
undertow/benchmark_config

@@ -4,6 +4,7 @@
     "default": {
     "default": {
       "setup_file": "setup",
       "setup_file": "setup",
       "json_url": "/",
       "json_url": "/",
+      "plaintext_url": "/plaintext",
       "port": 8080,
       "port": 8080,
       "sort": 120
       "sort": 120
     }
     }

+ 1 - 1
undertow/pom.xml

@@ -12,7 +12,7 @@
     <dependency>
     <dependency>
     	<groupId>io.undertow</groupId>
     	<groupId>io.undertow</groupId>
     	<artifactId>undertow-core</artifactId>
     	<artifactId>undertow-core</artifactId>
-    	<version>1.0.0.Alpha15</version>
+    	<version>1.0.0.Alpha19</version>
     </dependency>
     </dependency>
 	 <dependency>
 	 <dependency>
 		<groupId>com.fasterxml.jackson.core</groupId>
 		<groupId>com.fasterxml.jackson.core</groupId>

+ 30 - 52
undertow/src/main/java/hello/HelloWebServer.java

@@ -1,77 +1,55 @@
 package hello;
 package hello;
 
 
-import java.net.InetAddress;
-import java.net.InetSocketAddress;
 import java.nio.ByteBuffer;
 import java.nio.ByteBuffer;
-import java.util.HashMap;
+import java.util.Collections;
 import java.util.Map;
 import java.util.Map;
 
 
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.ObjectMapper;
-import io.undertow.UndertowOptions;
-import io.undertow.io.IoCallback;
+import com.fasterxml.jackson.databind.ObjectWriter;
+import io.undertow.Undertow;
 import io.undertow.server.HttpHandler;
 import io.undertow.server.HttpHandler;
-import io.undertow.server.HttpOpenListener;
 import io.undertow.server.HttpServerExchange;
 import io.undertow.server.HttpServerExchange;
 import io.undertow.util.Headers;
 import io.undertow.util.Headers;
-import org.xnio.BufferAllocator;
-import org.xnio.ByteBufferSlicePool;
-import org.xnio.ChannelListener;
-import org.xnio.ChannelListeners;
-import org.xnio.OptionMap;
-import org.xnio.Options;
-import org.xnio.Pool;
-import org.xnio.StreamConnection;
-import org.xnio.Xnio;
-import org.xnio.XnioWorker;
-import org.xnio.channels.AcceptingChannel;
+
+import static io.undertow.Undertow.builder;
 
 
 public class HelloWebServer {
 public class HelloWebServer {
 
 
-    private static final ObjectMapper mapper = new ObjectMapper();
+    private static final ObjectWriter writer = new ObjectMapper().writerWithType(Map.class);
+
+    public static final String HELLO_WORLD = "Hello, World!";
 
 
     private final int port;
     private final int port;
+    private final ByteBuffer buffer;
 
 
     public HelloWebServer(int port) {
     public HelloWebServer(int port) {
         this.port = port;
         this.port = port;
+        buffer = ByteBuffer.allocateDirect(HELLO_WORLD.getBytes().length);
+        buffer.put(HELLO_WORLD.getBytes());
+        buffer.flip();
     }
     }
 
 
     public void run() throws Exception {
     public void run() throws Exception {
 
 
-        Xnio xnio = Xnio.getInstance("nio", HelloWebServer.class.getClassLoader());
-        XnioWorker worker = xnio.createWorker(OptionMap.builder()
-                .set(Options.WORKER_IO_THREADS, Runtime.getRuntime().availableProcessors() * 2)
-                .set(Options.CONNECTION_HIGH_WATER, 1000000)
-                .set(Options.CONNECTION_LOW_WATER, 1000000)
-                .set(Options.TCP_NODELAY, true)
-                .set(Options.CORK, true)
-                .getMap());
-
-        OptionMap serverOptions = OptionMap.builder()
-                .set(Options.TCP_NODELAY, true)
-                .set(Options.REUSE_ADDRESSES, true)
-                .getMap();
-
-        Pool<ByteBuffer> buffers = new ByteBufferSlicePool(BufferAllocator.DIRECT_BYTE_BUFFER_ALLOCATOR, 2048, 2048 * 2048);
-
-        HttpHandler rootHandler = new HttpHandler() {
-            @Override
-            public void handleRequest(final HttpServerExchange exchange) throws Exception {
-                exchange.getResponseHeaders().put(Headers.CONTENT_TYPE, "application/json");
-                Map<String, String> data = new HashMap<String, String>();
-                data.put("message", "Hello, world");
-                String response = mapper.writeValueAsString(data);
-                exchange.getResponseHeaders().put(Headers.CONTENT_LENGTH, response.length());
-                exchange.getResponseSender().send(response, IoCallback.END_EXCHANGE);
-            }
-        };
-
-        HttpOpenListener openListener = new HttpOpenListener(buffers, OptionMap.create(UndertowOptions.BUFFER_PIPELINED_DATA, true), 2048);
-        openListener.setRootHandler(rootHandler);
-        ChannelListener<AcceptingChannel<StreamConnection>> acceptListener = ChannelListeners.openListenerAdapter(openListener);
-        AcceptingChannel<? extends StreamConnection> server = worker.createStreamConnectionServer(new InetSocketAddress(InetAddress.getByAddress(new byte[]{0, 0, 0, 0}), port), acceptListener, serverOptions);
-        server.resumeAccepts();
-
+        Undertow undertow = builder()
+                .addListener(port, "0.0.0.0")
+                .setBufferSize(1024 * 16)
+                .setHandler(new HttpHandler() {
+                    @Override
+                    public void handleRequest(final HttpServerExchange exchange) throws Exception {
+                        if (exchange.getRelativePath().equals("/plaintext")) {
+                            exchange.getResponseHeaders().put(Headers.CONTENT_TYPE, "text/plain");
+                            exchange.getResponseSender().send(buffer.duplicate());
+                        } else {
+                            exchange.getResponseHeaders().put(Headers.CONTENT_TYPE, "application/json");
+                            Map<String, String> data = Collections.singletonMap("message", "Hello, world");
+                            String response = writer.writeValueAsString(data);
+                            exchange.getResponseSender().send(response);
+                        }
+                    }
+                }).build();
 
 
+        undertow.start();
     }
     }
 
 
     public static void main(String[] args) throws Exception {
     public static void main(String[] args) throws Exception {