Introduction to Vert.x

yighu 3,509 views 30 slides Oct 16, 2013
Slide 1
Slide 1 of 30
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25
Slide 26
26
Slide 27
27
Slide 28
28
Slide 29
29
Slide 30
30

About This Presentation

Introduction to Vert.x.


Slide Content

VERT.X Columbus Code Camp 2013 Yiguang Hu

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(Server ) vertx.createHttpServer().websocketHandler { ws -> ws.dataHandler { data -> ws.writeTextFrame(data.toString ()) } }. requestHandler { req -> if ( req.uri == "/") req.response.sendFile " websockets/ws.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

SockJS <html> <head> <title> SockJS Test</title> <script src ="http://cdn.sockjs.org/sockjs-0.3.4.min.js"></script> </head> <body> <script> var sock = new SockJS('http://localhost:8080/testapp'); sock.onopen = function() { console.log('open '); }; sock.onmessage = function(e ) { console.log('message ', e.data ); alert('received message echoed from server: ' + e.data ); }; sock.onclose = function() { console.log('close '); }; function send(message ) { if ( sock.readyState === SockJS.OPEN ) { console.log("sending message") sock.send(message ); } else { console.log("The socket is not open."); } } </script> <form onsubmit ="return false;"> <input type="text" name="message" value="Hello, World!"/> <input type="button" value="Send SockJS data" onclick =" send(this.form.message.value )"/> </form> </body> </html>

SockJS def server = vertx.createHttpServer () // Serve the index page server.requestHandler { req -> if ( req.uri == "/") req.response.sendFile ' sockjs/index.html ' } // The handler for the SockJS app - we just echo data back vertx.createSockJSServer(server).installApp(prefix : '/ testapp ') { sock -> sock.dataHandler { buff -> sock << buff } } server.listen(8080)

How module communicate Shared data Maps or Sets May only store immutable data Immutable-no concurrency issue

Publish/subscribe messaging

Publish/subscribe var eb = require("vertx/event_bus "); var console = require("vertx /console"); var vertx = require("vertx ") vertx.setPeriodic(1000, function sendMessage () { eb. publish ('news -feed', 'some news!'); })

subscriber var eb = require("vertx/event_bus "); var console = require("vertx /console"); eb. registerHandler ("news -feed", function(message ) { console.log('Received news ' + message); });

P-to-P

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