Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
vert.x - polyglot asynchronous application deve...
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Pid
November 09, 2012
Programming
71
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
vert.x - polyglot asynchronous application development
Effortless asynchronous application development for the modern web and enterprise
Pid
November 09, 2012
More Decks by Pid
See All by Pid
Apache Tomcat 8 Preview
pidster
0
100
vert.x - asynchronous applications + big data
pidster
0
560
Other Decks in Programming
See All in Programming
Railsバージョンを4倍にした話
optim
0
420
Unity6 URPによる海底をテーマにしたVJシステムの解説 | Unity Shader 完全に理解した 勉強会
gam0022
0
370
Agents on Rails - Rails at Scale 2026
irinanazarova
0
560
AIに “答え“を書かせるのを やめてみた
___akari11
0
120
re:Inventに行く前に知っておきたい現地参加のノウハウ
nokomoro3
0
430
残高管理から台帳サービスへの進化
artoy
1
200
TechTown - Creating Composable Callables in Contemporary C++
rollbear
0
130
Long Living Tokens, Die, Die, Die! (or: The One Ring is Banned in Modern)
sylph01
0
310
UnityでSystem.Net.WebSocketsなWebSocketサーバが動かないのでUnity Monoのコードを覗いてみた / about implementing websocket server with unity mono
drumath2237
1
610
[Rails World 2026] Durable orchestration on Rails: from continuation to workflow
palkan
1
750
[ハンズオン]AIへの指示だけで「五目並べ」を作ってみよう
satoshi256kbyte
1
380
Event is what happens
moro
2
840
Featured
See All Featured
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
120
120k
Done Done
chrislema
187
17k
Code Reviewing Like a Champion
maltzj
529
40k
Amusing Abliteration
ianozsvald
1
350
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
58k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
330
We Are The Robots
honzajavorek
0
400
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
20k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.7k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
730
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Designing Experiences People Love
moore
143
24k
Transcript
vert.x Effortless asynchronous application development for the modern web and
enterprise
vert.x is the fastest application framework today (you may now
tweet “wtf?”)
Stuart Williams Consulting Architect SpringSource Division of VMware vert.x committer
@pidster
What is vert.x? • Polyglot • Simple • Scalable •
Asynchronous
Polyglot Write application components in: • JavaScript + CoffeeScript +
AngularJS • Ruby • Python • Groovy • Java Mix and match several programming languages in a single app.
Simple • ...without being simplistic • Create real applications in
just a few lines of code • No sprawling XML config
Scalable • Linear horizontal scale • Uses message passing •
Automatic load-balancing • Efficiently utilise your server cores
Asynchronous • NIO • Handlers • EventBus • WebSockets •
SockJS • FileSystem
Examples
JavaScript load('vertx.js’) vertx.createHttpServer().requestHandler(function(req) { var file = req.path === '/'
? 'index.html' : req.path; req.response.sendFile('webroot/' + file); }).listen(8080)
Ruby require "vertx" Vertx::HttpServer.new.request_handler do |req| file = req.uri ==
"/" ? "index.html" : req.uri req.response.send_file "webroot/#{file}" end.listen(8080)
Python import vertx server = vertx.create_http_server() @server.request_handler def request_handler(req): file
= "index.html" if req.uri == "/" else req.uri req.response.send_file("webroot/%s"%file) server.listen(8080)
Groovy vertx.createHttpServer().requestHandler { req -> def file = req.uri ==
"/" ? "index.html" : req.uri req.response.sendFile "webroot/$file" }.listen(8080)
Java import org.vertx.java.core.Handler; import org.vertx.java.core.http.HttpServerRequest; import org.vertx.java.deploy.Verticle; public class Server
extends Verticle { public void start() { vertx.createHttpServer().requestHandler(new Handler<HttpServerRequest>() { public void handle(HttpServerRequest req) { String file = req.path.equals("/") ? "index.html" : req.path; req.response.sendFile("webroot/" + file); } }).listen(8080); } }
Architecture
Key Dependencies • Java 7 • Netty • Hazelcast •
Jackson • JRuby • Jython • Rhino
Key API Methods vertx.createXXXServer vertx.createXXXClient vertx.fileSystem vertx.sharedData vertx.eventBus vertx.setPeriodic vertx.setTimer
Servers • NetServer • HttpServer – RouteMatcher – ServerWebSocket • SockJSServer
Clients • NetClient • HttpClient – WebSocket • SockJSSocket
EventBus eventBus.send(‘address’, message, replyHandler) eventBus.publish(‘address’, message) • EventBus Bridge –
send messages direct to JavaScript in web browsers • Messages are strongly typed in Java • JSON in JavaScript • Hash in Python, Ruby
Cluster • Hazelcast manages event bus address map and cluster
membership • Explain cache, listeners • vert.x NetServer & NetClient used for comms • Fully configurable network ports • Use SSL for security
Anatomy of a vert.x application
Server Verticle EventBus Modules Worker Modules Event Loop 8 Worker
Pool 20 Init Verticle
Launching load('vertx.js') var config = { "address": "org.pidster.foobar.control", ”port": 8081
} vertx.deployModule('org.pidster.foobar-v1.0', config, 1, function(id) { // called when deployed }); function vertxStop() { // stop & clean up }
Modules • Authentication Manager • Form Upload • JDBC Persistor
• Mailer • Mongo Persistor • Session Manager • Web Server • Work Queue • AMQP
mod-web-server load('vertx.js’) var config = { "web_root": <web_root>, "port", <port>,
"ssl": <ssl>, "key_store_password": <key_store_password>, "key_store_path": <key_store_path>, } vertx.deployModule('vertx.web-server-v1.0', config, 1, function() { // deployed });
Module • Simple structure • Optional lib dir • mod.json
{ “main”:”org.pidster.jdbc.Main”, “worker”: “true”, “includes: “org.pidster-foobar-v1.0” }
Best Practice • Verticle script to manage lifecycle • Define
configuration in JSON • Compose from modules • Never block the event loop!
What’s next?
Languages • Languages as modules • Lazy installation • Scala
• Clojure
Scala • Basic implementation complete • TODO: examples and docs
• github.com/swilliams-vmw/vertx-lang-scala
Scala Example vertx.createHttpServer .requestHandler({ req: HttpServerRequest => val file :
String = if (req.path == “/”) “/index.html” else req.uri req.response.sendFile("webroot/" + file) }).listen(8080)
Management • JMX API • Publish metrics on EventBus in
JSON • Configurable sample time & filters • GUI • github.com/swilliams-vmw/mod-management
Developers • IDE support • Build config and plugins •
Better, easier testing • More examples
The Cult of The Great Loop
All Hail The Selector • vert.x is Open Source •
Active community • Contributions welcome • Module repository is growing • 8th most popular on Github
Project • http://vertx.io • @timfox – project lead • @pidster
– project lurker • Uses Gradle for build • https://github.com/vert-x
And finally…
vert.x is fast • Shallow ramp / learning curve •
Diverse developer skill set • Reduced time-to-market • Performant architecture
Questions?