From 584cc704547576ab727ecca62cc6fbb2ee9fd1ef Mon Sep 17 00:00:00 2001 From: Clement Escoffier Date: Thu, 4 Jun 2015 13:49:59 +0200 Subject: [PATCH] Improve the sharing HTTP server example This commit adds a section in the REDME file with some explanation and launch instructions It also change how was made the example to allow code generation (codetrans) It also modifies the example to rely on the `-instances` vert.x parameter Signed-off-by: Clement Escoffier --- core-examples/README.adoc | 22 +++++++++++++++ .../example/core/http/sharing/client.groovy | 4 +-- .../http/sharing/httpserververticle.groovy | 3 +++ .../example/core/http/sharing/Client.java | 4 +-- .../core/http/sharing/HttpServerVerticle.java | 18 +++++++++++++ .../example/core/http/sharing/Server.java | 27 ++++--------------- .../vertx/example/core/http/sharing/client.js | 4 +-- .../core/http/sharing/httpserververticle.js | 3 +++ .../vertx/example/core/http/sharing/client.rb | 4 +-- .../core/http/sharing/httpserververticle.rb | 3 +++ 10 files changed, 58 insertions(+), 34 deletions(-) create mode 100644 core-examples/src/main/groovy/io/vertx/example/core/http/sharing/httpserververticle.groovy create mode 100644 core-examples/src/main/java/io/vertx/example/core/http/sharing/HttpServerVerticle.java create mode 100644 core-examples/src/main/js/io/vertx/example/core/http/sharing/httpserververticle.js create mode 100644 core-examples/src/main/rb/io/vertx/example/core/http/sharing/httpserververticle.rb diff --git a/core-examples/README.adoc b/core-examples/README.adoc index 23694a77..afc2894a 100644 --- a/core-examples/README.adoc +++ b/core-examples/README.adoc @@ -138,6 +138,28 @@ is uploaded successfully even if the file is very large (GigaBytes). link:src/main/java/io/vertx/example/core/http/upload/Server.java[Java upload server example] link:src/main/java/io/vertx/example/core/http/upload/Client.java[Java upload client example] +=== HTTP Server Sharing + +A server that illustrates the round robin orchestrated by vert.x when several verticles are opening HTTP servers on the same port: + +link:src/main/java/io/vertx/example/core/http/sharing/Server.java[Server Launcher] + +link:src/main/java/io/vertx/example/core/http/sharing/HttpServerVerticle.java[HTTP Server Verticle] + +The `Server` deploys two instances of the `HttpServerVerticle` verticle. + +You can run the server then open a browser and point it at link:http://localhost:8080[]. Requests will be handled by an instance after the other. + +The `Client` illustrates the round robin by periodically requesting the server and displays the response content. + +link:src/main/java/io/vertx/example/core/http/sharing/Client.java[Java simple HTTP client] + +You can directly launch the `HTTPServerVerticle` using the `vertx run` command. Then you can set the number of instance you want: + +``` +vertx run io.vertx.example.core.http.sharing.HttpServerVerticle -instances 4 +``` + === WebSockets echo example This example shows a Vert.x HTTP server which handles websockets connections. This example simply echoes back to the client diff --git a/core-examples/src/main/groovy/io/vertx/example/core/http/sharing/client.groovy b/core-examples/src/main/groovy/io/vertx/example/core/http/sharing/client.groovy index 8c7e1351..61fe7a98 100644 --- a/core-examples/src/main/groovy/io/vertx/example/core/http/sharing/client.groovy +++ b/core-examples/src/main/groovy/io/vertx/example/core/http/sharing/client.groovy @@ -1,9 +1,7 @@ - -vertx.setPeriodic(100, { l -> +vertx.setPeriodic(1000, { l -> vertx.createHttpClient().getNow(8080, "localhost", "/", { resp -> resp.bodyHandler({ body -> println(body.toString("ISO-8859-1")) }) }) }) - diff --git a/core-examples/src/main/groovy/io/vertx/example/core/http/sharing/httpserververticle.groovy b/core-examples/src/main/groovy/io/vertx/example/core/http/sharing/httpserververticle.groovy new file mode 100644 index 00000000..d16c7c6b --- /dev/null +++ b/core-examples/src/main/groovy/io/vertx/example/core/http/sharing/httpserververticle.groovy @@ -0,0 +1,3 @@ +vertx.createHttpServer().requestHandler({ req -> + req.response().putHeader("content-type", "text/html").end("

Hello from ${this}

") +}).listen(8080) diff --git a/core-examples/src/main/java/io/vertx/example/core/http/sharing/Client.java b/core-examples/src/main/java/io/vertx/example/core/http/sharing/Client.java index e3ba719b..532e49f0 100644 --- a/core-examples/src/main/java/io/vertx/example/core/http/sharing/Client.java +++ b/core-examples/src/main/java/io/vertx/example/core/http/sharing/Client.java @@ -16,8 +16,7 @@ public static void main(String[] args) { @Override public void start() throws Exception { - - vertx.setPeriodic(100, (l) -> { + vertx.setPeriodic(1000, (l) -> { vertx.createHttpClient().getNow(8080, "localhost", "/", resp -> { resp.bodyHandler(body -> { System.out.println(body.toString("ISO-8859-1")); @@ -25,6 +24,5 @@ public void start() throws Exception { }); } ); - } } diff --git a/core-examples/src/main/java/io/vertx/example/core/http/sharing/HttpServerVerticle.java b/core-examples/src/main/java/io/vertx/example/core/http/sharing/HttpServerVerticle.java new file mode 100644 index 00000000..0914a951 --- /dev/null +++ b/core-examples/src/main/java/io/vertx/example/core/http/sharing/HttpServerVerticle.java @@ -0,0 +1,18 @@ +package io.vertx.example.core.http.sharing; + +import io.vertx.core.AbstractVerticle; + +/** + * A very simple HTTP server returning it's 'id' in the response. + */ +public class HttpServerVerticle extends AbstractVerticle { + @Override + public void start() throws Exception { + vertx.createHttpServer().requestHandler(req -> { + req.response() + .putHeader("content-type", "text/html") + .end("

Hello from " + this + "

"); + }).listen(8080); + } +} + diff --git a/core-examples/src/main/java/io/vertx/example/core/http/sharing/Server.java b/core-examples/src/main/java/io/vertx/example/core/http/sharing/Server.java index 9e61e6a7..50bd99f9 100644 --- a/core-examples/src/main/java/io/vertx/example/core/http/sharing/Server.java +++ b/core-examples/src/main/java/io/vertx/example/core/http/sharing/Server.java @@ -1,40 +1,23 @@ package io.vertx.example.core.http.sharing; import io.vertx.core.AbstractVerticle; +import io.vertx.core.DeploymentOptions; import io.vertx.example.util.Runner; /** * An example illustrating the server sharing and round robin. The servers are identified using an id. + * The HTTP Server Verticle is instantiated twice in the deployment options. */ public class Server extends AbstractVerticle { - // Convenience method so you can run it in your IDE public static void main(String[] args) { Runner.runExample(Server.class); } @Override public void start() throws Exception { - getVertx().deployVerticle(new HttpVerticle("server-1")); - getVertx().deployVerticle(new HttpVerticle("server-2")); - } - - - private class HttpVerticle extends AbstractVerticle { - - private final String id; - - private HttpVerticle(String id) { - this.id = id; - } - - - @Override - public void start() throws Exception { - vertx.createHttpServer().requestHandler(req -> { - req.response().putHeader("content-type", "text/html").end("

Hello from " + - id + "

"); - }).listen(8080); - } + getVertx().deployVerticle( + "io.vertx.example.core.http.sharing.HttpServerVerticle", + new DeploymentOptions().setInstances(2)); } } diff --git a/core-examples/src/main/js/io/vertx/example/core/http/sharing/client.js b/core-examples/src/main/js/io/vertx/example/core/http/sharing/client.js index 975a3727..678cb9ac 100644 --- a/core-examples/src/main/js/io/vertx/example/core/http/sharing/client.js +++ b/core-examples/src/main/js/io/vertx/example/core/http/sharing/client.js @@ -1,9 +1,7 @@ - -vertx.setPeriodic(100, function (l) { +vertx.setPeriodic(1000, function (l) { vertx.createHttpClient().getNow(8080, "localhost", "/", function (resp) { resp.bodyHandler(function (body) { console.log(body.toString("ISO-8859-1")); }); }); }); - diff --git a/core-examples/src/main/js/io/vertx/example/core/http/sharing/httpserververticle.js b/core-examples/src/main/js/io/vertx/example/core/http/sharing/httpserververticle.js new file mode 100644 index 00000000..9430334e --- /dev/null +++ b/core-examples/src/main/js/io/vertx/example/core/http/sharing/httpserververticle.js @@ -0,0 +1,3 @@ +vertx.createHttpServer().requestHandler(function (req) { + req.response().putHeader("content-type", "text/html").end("

Hello from " + this + "

"); +}).listen(8080); diff --git a/core-examples/src/main/rb/io/vertx/example/core/http/sharing/client.rb b/core-examples/src/main/rb/io/vertx/example/core/http/sharing/client.rb index 1ccc2dd3..dc035bd2 100644 --- a/core-examples/src/main/rb/io/vertx/example/core/http/sharing/client.rb +++ b/core-examples/src/main/rb/io/vertx/example/core/http/sharing/client.rb @@ -1,9 +1,7 @@ - -$vertx.set_periodic(100) { |l| +$vertx.set_periodic(1000) { |l| $vertx.create_http_client().get_now(8080, "localhost", "/") { |resp| resp.body_handler() { |body| puts body.to_string("ISO-8859-1") } } } - diff --git a/core-examples/src/main/rb/io/vertx/example/core/http/sharing/httpserververticle.rb b/core-examples/src/main/rb/io/vertx/example/core/http/sharing/httpserververticle.rb new file mode 100644 index 00000000..15273b12 --- /dev/null +++ b/core-examples/src/main/rb/io/vertx/example/core/http/sharing/httpserververticle.rb @@ -0,0 +1,3 @@ +$vertx.create_http_server().request_handler() { |req| + req.response().put_header("content-type", "text/html").end("

Hello from #{$this}

") +}.listen(8080)