Upload
jfarcand
View
1.603
Download
1
Embed Size (px)
DESCRIPTION
Présentation d'Atmosphere, Swagger et SwaggerSocket
Citation preview
WebSockets et Atmosphere
Jeanfrancois Arcand
twitter.com/jfarcand facebook.com/jeanfrancois.arcand.3
Who is Wordnik?
•Founded in 2008 by Erin McKean
•"Understand meaning of words automatically"
•Patented "Free-Range Definition" technology
•Constructed largest (known) English Word Graph
We do Discovery – in real time!!
Atmosphere
Apache 2 Github ~450 « followers »
20 000 et plus téléchargement
par mois!
Client + serverSupporté
par + de 25
frameworks
Scala, Groovy,
JRuby, Java
1.0.0.beta1
Depuis 2008
Atmosphere
Apache 2 Github ~450 « followers »
Depuis 2008
20 000 et plus téléchargement
par mois!
Client + serverSupporté
par + de 25
frameworks
Scala, Groovy,
JRuby, Java
Très Très actif!!!
WSJ.com
•40 millions de requêtes par jours
•Atmosphere 0.9.4/Jetty 8.1.3
•Websockets => long-polling => JSONP
•IE 6/7/8/9/10, Chrome XX, Firefox 3/12, Safari XX
•WebSockets: IE 10, Chrome 14, Firefox 8, Safari 5
Mon WebSocket au Canada!
WebSocket
Mon WebSocket au Canada!
WebSocket
C’est quoi
Mon WebSocket au Canada!
WebSocket
N’importe quoi!
C’est quoi
Mon WebSocket au Canada!
WebSocket
N’importe quoi!
C’est quoi
Atmosphere
Mon WebSocket au Canada!
WebSocket
N’importe quoi!
C’est quoi
Atmosphere
Concepts
Mon WebSocket au Canada!
WebSocket
N’importe quoi!
C’est quoi
Atmosphere
DémoConcepts
Le protocole WebSocket vise à développer un canal de communication bidirectionnel et « full-duplex » sur un socket TCP pour les fureteurs et les serveurs web.
WebSockets
Avant (Long-Polling)
Fureteur
Server
Requête
Avant (Long-Polling)
Fureteur
Requête
Server
Avant (Long-Polling)
Fureteur
Requête
Réponse
Server
Oups!!
Fureteur
ServerRien
Requête
Oups!
Fureteur
Requête
Server
Zzzz
Mieux!
Fureteur
Server
Cache
Requête
Mieux!
Requête
Server
Cache
Réponse
Fureteur
A la limite (HTTP Streaming)
Fureteur
Server
Requête
A la limite (HTTP Streaming)
Fureteur
Requête
Server
A la limite (HTTP Streaming)
Fureteur
Requête
Réponse
Server
A la limite (HTTP Streaming)
Fureteur
Requête
Réponse
Réponse
Server
Oups!!
Fureteur
Requête
Réponse
Réponse
Server
L’enfer
A la limite (HTTP Streaming)
Fureteur
Requête
Réponse
Réponse
Server
L’enfer
Hack
Oups!!!
Fureteur
Requête
Réponse
Réponse
Server
Proxy
Mieux
Fureteur
Requête
Réponse
Réponse
Server
Cache
Mieux
Fureteur
Requête
Réponse
Réponse
Server
Cache« HeartBea
t »
Mieux: Server Side Events (SSE)
Fureteur
Requête
Réponse
Réponse
Server
Oups!!!
Fureteur
Requête
Réponse
Réponse
Server
Proxy
Mieux
Fureteur
Requête
Réponse
Réponse
Server
Cache« HeartBea
t »
WebSockets
Fureteur
Server
Hanshake
WebSockets
Fureteur
Server
Hanshake
OK
WebSockets
Fureteur
Server
Requête
WebSockets
Fureteur
Requête
Server
WebSockets
Fureteur
Server
Réponse
WebSockets
Fureteur
Server
Requête
WebSockets
Fureteur
Server
Requête
Requête
WebSockets
Fureteur
Requête
Requête
Server
WebSockets
Fureteur
Server
Réponse
Réponse
A TOUS moment
Fureteur
Réponse
Server
Ah la belle vie, la vie, la vie ahah!
Fureteur
Réponse
Server
Oups!!
Fureteur
Réponse
Server
Proxy
Mieux!
Fureteur
Réponse
Server
Cache
T 127.0.0.1:65062 -> 127.0.0.1:8080 [AP]
GET / HTTP/1.1.
Upgrade: websocket.
Connection: Upgrade.
Host: 127.0.0.1:8080.
Origin: http://127.0.0.1:8080.
Sec-WebSocket-Key: Tz9qdt3lmte6Slf+GvpRqQ==.
Sec-WebSocket-Version: 13.
Sec-WebSocket-Extensions: x-webkit-deflate-frame.
Première requête
T 127.0.0.1:8080 -> 127.0.0.1:51292 [AP]
HTTP/1.1 101 Switching Protocols.
Upgrade: WebSocket.
Connection: Upgrade.
Sec-WebSocket-Accept: HVXA7SqH5uYeN6aD9tZ0JQbfTJA=.
Réponse
T 127.0.0.1:8080 -> 127.0.0.1:51292 [AP]
HTTP/1.1 101 Switching Protocols.
Upgrade: WebSocket.
Connection: Upgrade.
Sec-WebSocket-Accept: HVXA7SqH5uYeN6aD9tZ0JQbfTJA=.
Ah la belle vie, la vie, la vie, ahah
T 127.0.0.1:8080 -> 127.0.0.1:65064 [AP]
HTTP/1.1 501 Not Implemented.
Server: Apache-Coyote/1.1.
X-Atmosphere-error: Websocket protocol not supported.
Transfer-Encoding: chunked.
Date: Fri, 15 Jun 2012 10:06:30 GMT.
Connection: close.
.
OUPS!!!
WebSocket API – Standard JavaScript
websocket = new WebSocket(wsUri);
websocket.onopen = function(evt) { …};
websocket.onclose = function(evt) { …};
websocket.onmessage = function(evt) { …};
websocket.onerror = function(evt) { …};
webSocket.send(…)
WebSocket API – Java
Jetty 7, GlassFish 3.1, Netty 3, Tomcat 7.0.27, Resin 4, JBoss Plugin
JSR 356: http://jcp.org/en/jsr/detail?id=356
AHC (Client -> De facto)
http://github.com/sonatype/async-http-client
Ah la belle vie, la vie, la vie, ahah
OUPS!!!
C’est parti!
Tomcat7
Jetty7
Jetty8
GlassFish3.
GlassFish
312
Firefox
Safari
Opera
Chrome
IE
N’importe quoi
Tomcat7
Jetty7
Jetty8
GlassFish3.
GlassFish
312
Firefox
Safari
Opera
Chrome
IE
N’importe quoi
Tomcat7
Jetty7
Jetty8
GlassFish3.
GlassFish
312
Firefox
Safari
Opera
Chrome
IE
Au Secour
s!!
N’importe quoi
Tomcat7
Jetty7
Jetty8
GlassFish3.
GlassFish
312
Firefox
Safari
Opera
Chrome
IE
Au Secour
s!!
Streaming
N’importe quoi
Tomcat7
Jetty7
Jetty8
GlassFish3.
GlassFish
312
Firefox
Safari
Opera
Chrome
IE
Au Secour
s!!
Streaming
SSE
N’importe quoi
Tomcat7
Jetty7
Jetty8
GlassFish3.
GlassFish
312
Firefox
Safari
Opera
Chrome
IE
Au Secour
s!!
Streaming
SSE
JSONP
N’importe quoi
Tomcat7
Jetty7
Jetty8
GlassFish3.
GlassFish
312
Firefox
Safari
Opera
Chrome
IE
Au Secour
s!!
Streaming
SSE
Long Polling
JSONP
Tomcat7
Jetty7
Jetty8
GlassFish3.
GlassFish
312
Firefox
Safari
Opera
Chrome
IE
Atmosphere à la
rescousse!!!
Atmosphere -WebSockets
Tomcat7
Jetty7
Jetty8
GlassFish3.
GlassFish
312
Firefox
Safari
Opera
Chrome
IE
atm
osp
here
.js
Atm
osp
here
API
Atmosphere - HTML5 Server Side Events
Tomcat7
Jetty7
Servlet3
WebLogic
GlassFish
312
Firefox
Safari
Opera
Chrome
IE
atm
osp
here
.js
Atm
osp
here
API
Atmosphere Long-Polling/HTTP Streaming
JBoss
Jetty7
Servlet3
WebLogic.
GlassFish
Firefox
Safari
Opera
Chrome
IE
atm
osp
here
.js
Atm
osp
here
API
Atmosphere
JBoss
Jetty7
Servlet3
WebLogic.
GlassFish
Firefox
Safari
Opera
Chrome
IE
atm
osp
here
.js
Atm
osp
here
API
Même API, peut
importe le transport!!
Socket.IO, GWT, Wicket, JSF, etc.
JBoss
Jetty7
Servlet3
WebLogic.
GlassFish
Firefox
Safari
Opera
Chrome
IE
Sock
et.
IO
Atm
osp
here
API
PORTABLE!!!!!
JBoss
Jetty7
Servlet3
WebLogic.
GlassFish
Firefox
Safari
Opera
Chrome
IE
Sock
et.
IO
Atm
osp
here
API
PORTABLE
•Tout framework ne supportant que les WebSockets
Mise en production
IMPOSSIBLE
Grosse Erreur!!!!!
Atmosphere
•Suspend: décrocher la ligne
•Resume: racrocher la ligne
•Broadcast: parler sur une ou plusieurs lignes, seul, à deux ou plusieurs.
Définition
Requête Normale
Fureteur
Fureteur
Fureteur
Server
Requête Normale
Fureteur
Fureteur
Fureteur
Server
Suspend
Fureteur
Fureteur
Fureteur
Server
Suspend
Fureteur
Fureteur
Fureteur
ServerS
Suspend
Fureteur
Fureteur
Fureteur
ServerS
Suspend
Fureteur
Fureteur
Fureteur
ServerS
Broadcast
Fureteur
Fureteur
Fureteur
SB
Server
Broadcast
Fureteur
Fureteur
Fureteur
SB
Server
Resume
Fureteur
Fureteur
Fureteur
B
Server
R
Resume
Fureteur
Fureteur
Fureteur
B
ServerS
•Default: in-memory
•Nuage
• RedisBroadcaster
• JMSBroadcaster
• XMPPBroadcaster
• HazelcastBroadcaster
• JGroupsBroascaster
•Multi-Threads, Async I/O par default
Broadcaster
Broadcaster Nuage
Fureteur
Fureteur
Fureteur S
Server
ServerS
Broadcaster Nuage
Fureteur
Fureteur
Fureteur S
Server
ServerS
Broadcaster Nuage
Fureteur
Fureteur
Fureteur S
B
Server
ServerS
Broadcaster Nuage
Fureteur
Fureteur
Fureteur
BServer
Server
Broadcaster Nuage
Fureteur
Fureteur
Fureteur Server
Server
B
Broadcaster Nuage
Fureteur
Fureteur
Fureteur Server
Server
•WebSocketHandler
• Seulement WebSocket (ATTENTION)!
•AtmosphereHandler
• Tout les protocoles
•Jersey Resource
• Tout les protocoles
•Meteor
• Tout les protocoles
Composantes Atmosphere
•WebSocketProtocolDefinir sont propre WebSocket protocol.
•Atmosphere, par default, utilise le SimpleHttpProtocolMessage WebSocket transformé en HTTP POST, avec read/write asynchrone.
•SwaggerSocket: REST over WebSockets -> Protocol plus puissant
WebSocket Sub Protocol
Construction d’une appli
Hello, Swagger
•Swagger is…
• Spec for declaring an API schema
• A framework for auto-generating the spec
• A library for client library generation
• A JSON-based test framework
What is this Resource Declaration?
•Listing of all available APIshttp://petstore.swagger.wordnik.com/api/resources.json
“It’s like a sitemap for your
API!”
Démo
But What about Speed?
•Yes! REST over HTTP is slow
• Connection overhead
• Marshaling & Unmarshaling overhead
• Chatter
• JSON/XML need to diet
•It's also…
• Synchronous
• GET/POST/PUT/DELETE don't cut it
Your prod Database isn't doing
REST
•REST over WebSocket
•Protocole basé sur JSON
•Performance améliorée
•Simple
•Supporte également sur HTTP.
•Supporte le multi requètes/réponses.
SwaggerSocket
twitter.com/wordniktwitter.com/atmo_frameworktwitter.com/swaggersocket
http://github.com/Atmosphere/atmospherehttp://github.com/wordnik/
swaggersocket
Powered By Wordnik