What is it? PolyGlot Simple Scalable Asynchronous Concurrent
Simple A groovy server example: vertx.createHttpServer().requestHandler { req -> req.response.end "<html><body><h1>Hello from vert.x !</h1></body></html>" }.listen(8080, " localhost ")
Demo create a simple server that dispays a static html page vertx run http/ Servertxt.groovy
PolyG l ot Java groovy Python/ jython Ruby JavaScript(CoffeeScript , AngularJS ) ( Scala , clojure to come….) Mix them in one app
PolyGlot Vert.x Core(Java ) Language Specific Layer Natural API
Scalable Linear horizontal scale M essage passing Automatic load-balancing Efficiently utilizes server cores
Vert.x Architecture
Event Bus
Scaling I nstances: -instance 10 Clustering: -cluster
Asynchronous Java Version web server –Anonymous inner class public class ServerExample extends Verticle { public void start() { vertx.createHttpServer().requestHandler( new Handler< HttpServerRequest >() { public void handle(HttpServerRequest req ) { System.out.println("Got request: " + req.uri ()); req.response().headers().set("Content -Type", "text/html; charset =UTF-8"); req.response().end ("<html><body><h1>Hello from vert.x !</h1></body></html>"); } }).listen(8080); } }
Asynchronous Groovy Version web server-closure package http vertx.createHttpServer().requestHandler { req -> req.response.end "<html><body><h1>Hello from vert.x !</h1></body></html>" }.listen(8080, " localhost ")
Asynchronous JavaScript Version web server-function var vertx = require('vertx ') vertx.createHttpServer().requestHandler( function(req ) { req.response.end ("<html><body><h1>Hello from vert.x !</h1></body></html>"); }).listen(8080);
Asynchronous Java Version web server –Anonymous inner class public class ServerExample extends Verticle { public void start() { vertx.createHttpServer().requestHandler( new Handler< HttpServerRequest >() { public void handle(HttpServerRequest req ) { System.out.println("Got request: " + req.uri ()); req.response().headers().set("Content -Type", "text/html; charset =UTF-8"); req.response().end ("<html><body><h1>Hello from vert.x !</h1></body></html>"); } }).listen(8080); } }
WebSockets (Client) <script> var socket; if ( window.WebSocket ) { socket = new WebSocket("ws://localhost:8080/myapp"); socket.onmessage = function(event ) { alert("Received data from websocket : " + event.data ); } socket.onopen = function(event ) { alert("Web Socket opened!"); }; socket.onclose = function(event ) { alert("Web Socket closed."); }; } else { alert("Your browser does not support Websockets . (Use Chrome)"); } function send(message ) { if (! window.WebSocket ) { return; } if ( socket.readyState == WebSocket.OPEN ) { socket.send(message ); } else { alert("The socket is not open."); } } </script>
SockJS Handles the communication between the browser and the server. Provides a websocket -like API in client-side JS Works when websockets not available JSON-Polling, XHR-Polling/Streaming, etc
Ping var eb = require("vertx/event_bus "); var console = require("vertx /console"); var vertx = require("vertx ") vertx.setPeriodic(1000, function sendMessage () { eb. send ('ping -address', 'ping!', function(reply ) { console.log("Received reply: " + reply); }); })
receiver var eb = require("vertx/event_bus "); var console = require("vertx /console"); eb.registerHandler("ping -address", function(message , replier) { console.log('Received message ' + message); // Now reply to it replier('pong !'); });
Event Bus Fit asynchronous Model Decoupling-Only data, no method calls Can be distributed JSON
Demonstration Web app Listen on a topic and send received data to web through websocket A server that searches random topics on duckduckgo periodically and publish result to the topic Multiple browsers display the data and are update simultaneously
References Vertx.io Some slides/charts are lifted from the following presentations http://m.javaworld.com/javaworld/jw-07-2013/130730-osjp-enterprise-messaging-and-integration-with-vertx.html?page=1 http://www.cubrid.org/blog/dev-platform/inside-vertx-comparison-with-nodejs/ http://www.javacodegeeks.com/2012/07/osgi-case-study-modular-vertx.html