From 4dbe03635e19bc894046c920ed1da5c94a023e36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kjetil=20=C3=98rbekk?= Date: Mon, 9 Apr 2012 12:50:50 +0200 Subject: Add benchmark for Jetty+JsonRpc. --- .../orbekk/same/benchmark/HttpClientBenchmark.java | 82 ++++++++++++++++++++++ .../orbekk/same/benchmark/HttpExampleServer.java | 29 ++++++++ .../orbekk/same/benchmark/HttpExampleService.java | 5 ++ 3 files changed, 116 insertions(+) create mode 100644 same/src/main/java/com/orbekk/same/benchmark/HttpClientBenchmark.java create mode 100644 same/src/main/java/com/orbekk/same/benchmark/HttpExampleServer.java create mode 100644 same/src/main/java/com/orbekk/same/benchmark/HttpExampleService.java (limited to 'same/src') diff --git a/same/src/main/java/com/orbekk/same/benchmark/HttpClientBenchmark.java b/same/src/main/java/com/orbekk/same/benchmark/HttpClientBenchmark.java new file mode 100644 index 0000000..fc315c4 --- /dev/null +++ b/same/src/main/java/com/orbekk/same/benchmark/HttpClientBenchmark.java @@ -0,0 +1,82 @@ +package com.orbekk.same.benchmark; + +import java.net.MalformedURLException; +import java.net.URL; +import java.util.concurrent.CountDownLatch; + +import com.google.protobuf.RpcCallback; +import com.googlecode.jsonrpc4j.ProxyUtil; +import com.orbekk.net.MyJsonRpcHttpClient; +import com.orbekk.protobuf.Rpc; +import com.orbekk.protobuf.RpcChannel; +import com.orbekk.same.benchmark.Example.Data; + +public class HttpClientBenchmark { + private final HttpExampleService service; + private final int warmupIterations; + private final int iterations; + + public static void benchmark(String url, int warmupIterations, + int iterations) throws InterruptedException { + MyJsonRpcHttpClient client; + try { + client = new MyJsonRpcHttpClient( + new URL(url), 2000, 2000); + } catch (MalformedURLException e) { + e.printStackTrace(); + throw new RuntimeException(e); + } + HttpExampleService service = ProxyUtil.createProxy( + HttpClientBenchmark.class.getClassLoader(), + HttpExampleService.class, + client); + HttpClientBenchmark benchmark = new HttpClientBenchmark( + service, warmupIterations, iterations); + benchmark.benchmark(); + } + + public HttpClientBenchmark(HttpExampleService service, + int warmupIterations, int iterations) { + this.service = service; + this.warmupIterations = warmupIterations; + this.iterations = iterations; + } + + private void runBenchmark(int iterations) throws InterruptedException { + final CountDownLatch finished = + new CountDownLatch(iterations); + + for (int i = 0; i < iterations; i++) { + service.methodA("", iterations, 0); + finished.countDown(); + } + + finished.await(); + } + + public void benchmark() throws InterruptedException { + long warmupStart = System.currentTimeMillis(); + runBenchmark(warmupIterations); + long warmupFinished = System.currentTimeMillis(); + System.out.println("Warmup: " + warmupIterations + " in " + + (warmupFinished - warmupStart) + "ms. "); + long start = System.currentTimeMillis(); + runBenchmark(iterations); + long finished = System.currentTimeMillis(); + System.out.println("Benchmark: " + iterations+ " in " + + (finished - start) + "ms. "); + } + + public static void main(String[] args) { + if (args.length < 1) { + System.err.println("Usage: ClientBenchmark "); + System.exit(1); + } + String url = args[0]; + try { + benchmark(url, 1000, 10000); + } catch (InterruptedException e) { + System.out.println("Benchmark failed."); + } + } +} diff --git a/same/src/main/java/com/orbekk/same/benchmark/HttpExampleServer.java b/same/src/main/java/com/orbekk/same/benchmark/HttpExampleServer.java new file mode 100644 index 0000000..f694680 --- /dev/null +++ b/same/src/main/java/com/orbekk/same/benchmark/HttpExampleServer.java @@ -0,0 +1,29 @@ +package com.orbekk.same.benchmark; + +import java.util.logging.Logger; + +import com.orbekk.same.http.JettyServerBuilder; +import com.orbekk.same.http.JettyServerContainer; + +public class HttpExampleServer { + private final static Logger logger = + Logger.getLogger(HttpExampleServer.class.getName()); + private volatile JettyServerContainer server; + + class ServiceImpl implements HttpExampleService { + @Override public String methodA(String message, int arg1, int arg2) { + return message + arg1 + arg2; + } + } + + public void runServer(int port) throws Exception { + server = new JettyServerBuilder(port) + .withService(new ServiceImpl(), HttpExampleService.class) + .build(); + server.start(); + } + + public void stopServer() throws Exception { + server.stop(); + } +} diff --git a/same/src/main/java/com/orbekk/same/benchmark/HttpExampleService.java b/same/src/main/java/com/orbekk/same/benchmark/HttpExampleService.java new file mode 100644 index 0000000..ee8cbf5 --- /dev/null +++ b/same/src/main/java/com/orbekk/same/benchmark/HttpExampleService.java @@ -0,0 +1,5 @@ +package com.orbekk.same.benchmark; + +public interface HttpExampleService { + String methodA(String message, int arg1, int arg2); +} -- cgit v1.2.3