95
WebSockets et Atmosphere Jeanfrancois Arcand twitter.com/jfarcand facebook.com/jeanfrancois.arcand.3

Introduction au WebSockets via le projet Atmosphere

Embed Size (px)

DESCRIPTION

Présentation d'Atmosphere, Swagger et SwaggerSocket

Citation preview

Page 1: Introduction au WebSockets via le projet Atmosphere

WebSockets et Atmosphere

Jeanfrancois Arcand

twitter.com/jfarcand facebook.com/jeanfrancois.arcand.3

Page 2: Introduction au WebSockets via le projet Atmosphere

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!!

Page 3: Introduction au WebSockets via le projet Atmosphere

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

Page 4: Introduction au WebSockets via le projet Atmosphere

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!!!

Page 5: Introduction au WebSockets via le projet Atmosphere

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

Page 6: Introduction au WebSockets via le projet Atmosphere

Mon WebSocket au Canada!

WebSocket

Page 7: Introduction au WebSockets via le projet Atmosphere

Mon WebSocket au Canada!

WebSocket

C’est quoi

Page 8: Introduction au WebSockets via le projet Atmosphere

Mon WebSocket au Canada!

WebSocket

N’importe quoi!

C’est quoi

Page 9: Introduction au WebSockets via le projet Atmosphere

Mon WebSocket au Canada!

WebSocket

N’importe quoi!

C’est quoi

Atmosphere

Page 10: Introduction au WebSockets via le projet Atmosphere

Mon WebSocket au Canada!

WebSocket

N’importe quoi!

C’est quoi

Atmosphere

Concepts

Page 11: Introduction au WebSockets via le projet Atmosphere

Mon WebSocket au Canada!

WebSocket

N’importe quoi!

C’est quoi

Atmosphere

DémoConcepts

Page 12: Introduction au WebSockets via le projet Atmosphere

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

Page 13: Introduction au WebSockets via le projet Atmosphere

Avant (Long-Polling)

Fureteur

Server

Requête

Page 14: Introduction au WebSockets via le projet Atmosphere

Avant (Long-Polling)

Fureteur

Requête

Server

Page 15: Introduction au WebSockets via le projet Atmosphere

Avant (Long-Polling)

Fureteur

Requête

Réponse

Server

Page 16: Introduction au WebSockets via le projet Atmosphere

Oups!!

Fureteur

ServerRien

Requête

Page 17: Introduction au WebSockets via le projet Atmosphere

Oups!

Fureteur

Requête

Server

Zzzz

Page 18: Introduction au WebSockets via le projet Atmosphere

Mieux!

Fureteur

Server

Cache

Requête

Page 19: Introduction au WebSockets via le projet Atmosphere

Mieux!

Requête

Server

Cache

Réponse

Fureteur

Page 20: Introduction au WebSockets via le projet Atmosphere

A la limite (HTTP Streaming)

Fureteur

Server

Requête

Page 21: Introduction au WebSockets via le projet Atmosphere

A la limite (HTTP Streaming)

Fureteur

Requête

Server

Page 22: Introduction au WebSockets via le projet Atmosphere

A la limite (HTTP Streaming)

Fureteur

Requête

Réponse

Server

Page 23: Introduction au WebSockets via le projet Atmosphere

A la limite (HTTP Streaming)

Fureteur

Requête

Réponse

Réponse

Server

Page 24: Introduction au WebSockets via le projet Atmosphere

Oups!!

Fureteur

Requête

Réponse

Réponse

Server

L’enfer

Page 25: Introduction au WebSockets via le projet Atmosphere

A la limite (HTTP Streaming)

Fureteur

Requête

Réponse

Réponse

Server

L’enfer

Hack

Page 26: Introduction au WebSockets via le projet Atmosphere

Oups!!!

Fureteur

Requête

Réponse

Réponse

Server

Proxy

Page 27: Introduction au WebSockets via le projet Atmosphere

Mieux

Fureteur

Requête

Réponse

Réponse

Server

Cache

Page 28: Introduction au WebSockets via le projet Atmosphere

Mieux

Fureteur

Requête

Réponse

Réponse

Server

Cache« HeartBea

t »

Page 29: Introduction au WebSockets via le projet Atmosphere

Mieux: Server Side Events (SSE)

Fureteur

Requête

Réponse

Réponse

Server

Page 30: Introduction au WebSockets via le projet Atmosphere

Oups!!!

Fureteur

Requête

Réponse

Réponse

Server

Proxy

Page 31: Introduction au WebSockets via le projet Atmosphere

Mieux

Fureteur

Requête

Réponse

Réponse

Server

Cache« HeartBea

t »

Page 32: Introduction au WebSockets via le projet Atmosphere

WebSockets

Fureteur

Server

Hanshake

Page 33: Introduction au WebSockets via le projet Atmosphere

WebSockets

Fureteur

Server

Hanshake

OK

Page 34: Introduction au WebSockets via le projet Atmosphere

WebSockets

Fureteur

Server

Requête

Page 35: Introduction au WebSockets via le projet Atmosphere

WebSockets

Fureteur

Requête

Server

Page 36: Introduction au WebSockets via le projet Atmosphere

WebSockets

Fureteur

Server

Réponse

Page 37: Introduction au WebSockets via le projet Atmosphere

WebSockets

Fureteur

Server

Requête

Page 38: Introduction au WebSockets via le projet Atmosphere

WebSockets

Fureteur

Server

Requête

Requête

Page 39: Introduction au WebSockets via le projet Atmosphere

WebSockets

Fureteur

Requête

Requête

Server

Page 40: Introduction au WebSockets via le projet Atmosphere

WebSockets

Fureteur

Server

Réponse

Réponse

Page 41: Introduction au WebSockets via le projet Atmosphere

A TOUS moment

Fureteur

Réponse

Server

Page 42: Introduction au WebSockets via le projet Atmosphere

Ah la belle vie, la vie, la vie ahah!

Fureteur

Réponse

Server

Page 43: Introduction au WebSockets via le projet Atmosphere

Oups!!

Fureteur

Réponse

Server

Proxy

Page 44: Introduction au WebSockets via le projet Atmosphere

Mieux!

Fureteur

Réponse

Server

Cache

Page 45: Introduction au WebSockets via le projet Atmosphere

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

Page 46: Introduction au WebSockets via le projet Atmosphere

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

Page 47: Introduction au WebSockets via le projet Atmosphere

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

Page 48: Introduction au WebSockets via le projet Atmosphere

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!!!

Page 49: Introduction au WebSockets via le projet Atmosphere

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(…)

Page 50: Introduction au WebSockets via le projet Atmosphere

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

Page 51: Introduction au WebSockets via le projet Atmosphere

Ah la belle vie, la vie, la vie, ahah

Page 52: Introduction au WebSockets via le projet Atmosphere

OUPS!!!

Page 53: Introduction au WebSockets via le projet Atmosphere

C’est parti!

Tomcat7

Jetty7

Jetty8

GlassFish3.

GlassFish

312

Firefox

Safari

Opera

Chrome

IE

Page 54: Introduction au WebSockets via le projet Atmosphere

N’importe quoi

Tomcat7

Jetty7

Jetty8

GlassFish3.

GlassFish

312

Firefox

Safari

Opera

Chrome

IE

Page 55: Introduction au WebSockets via le projet Atmosphere

N’importe quoi

Tomcat7

Jetty7

Jetty8

GlassFish3.

GlassFish

312

Firefox

Safari

Opera

Chrome

IE

Au Secour

s!!

Page 56: Introduction au WebSockets via le projet Atmosphere

N’importe quoi

Tomcat7

Jetty7

Jetty8

GlassFish3.

GlassFish

312

Firefox

Safari

Opera

Chrome

IE

Au Secour

s!!

Streaming

Page 57: Introduction au WebSockets via le projet Atmosphere

N’importe quoi

Tomcat7

Jetty7

Jetty8

GlassFish3.

GlassFish

312

Firefox

Safari

Opera

Chrome

IE

Au Secour

s!!

Streaming

SSE

Page 58: Introduction au WebSockets via le projet Atmosphere

N’importe quoi

Tomcat7

Jetty7

Jetty8

GlassFish3.

GlassFish

312

Firefox

Safari

Opera

Chrome

IE

Au Secour

s!!

Streaming

SSE

JSONP

Page 59: Introduction au WebSockets via le projet Atmosphere

N’importe quoi

Tomcat7

Jetty7

Jetty8

GlassFish3.

GlassFish

312

Firefox

Safari

Opera

Chrome

IE

Au Secour

s!!

Streaming

SSE

Long Polling

JSONP

Page 60: Introduction au WebSockets via le projet Atmosphere

Tomcat7

Jetty7

Jetty8

GlassFish3.

GlassFish

312

Firefox

Safari

Opera

Chrome

IE

Atmosphere à la

rescousse!!!

Page 61: Introduction au WebSockets via le projet Atmosphere

Atmosphere -WebSockets

Tomcat7

Jetty7

Jetty8

GlassFish3.

GlassFish

312

Firefox

Safari

Opera

Chrome

IE

atm

osp

here

.js

Atm

osp

here

API

Page 62: Introduction au WebSockets via le projet Atmosphere

Atmosphere - HTML5 Server Side Events

Tomcat7

Jetty7

Servlet3

WebLogic

GlassFish

312

Firefox

Safari

Opera

Chrome

IE

atm

osp

here

.js

Atm

osp

here

API

Page 63: Introduction au WebSockets via le projet Atmosphere

Atmosphere Long-Polling/HTTP Streaming

JBoss

Jetty7

Servlet3

WebLogic.

GlassFish

Firefox

Safari

Opera

Chrome

IE

atm

osp

here

.js

Atm

osp

here

API

Page 64: Introduction au WebSockets via le projet Atmosphere

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!!

Page 65: Introduction au WebSockets via le projet Atmosphere

Socket.IO, GWT, Wicket, JSF, etc.

JBoss

Jetty7

Servlet3

WebLogic.

GlassFish

Firefox

Safari

Opera

Chrome

IE

Sock

et.

IO

Atm

osp

here

API

Page 66: Introduction au WebSockets via le projet Atmosphere

PORTABLE!!!!!

JBoss

Jetty7

Servlet3

WebLogic.

GlassFish

Firefox

Safari

Opera

Chrome

IE

Sock

et.

IO

Atm

osp

here

API

PORTABLE

Page 67: Introduction au WebSockets via le projet Atmosphere

•Tout framework ne supportant que les WebSockets

Mise en production

IMPOSSIBLE

Grosse Erreur!!!!!

Page 68: Introduction au WebSockets via le projet Atmosphere

Atmosphere

Page 69: Introduction au WebSockets via le projet Atmosphere

•Suspend: décrocher la ligne

•Resume: racrocher la ligne

•Broadcast: parler sur une ou plusieurs lignes, seul, à deux ou plusieurs.

Définition

Page 70: Introduction au WebSockets via le projet Atmosphere

Requête Normale

Fureteur

Fureteur

Fureteur

Server

Page 71: Introduction au WebSockets via le projet Atmosphere

Requête Normale

Fureteur

Fureteur

Fureteur

Server

Page 72: Introduction au WebSockets via le projet Atmosphere

Suspend

Fureteur

Fureteur

Fureteur

Server

Page 73: Introduction au WebSockets via le projet Atmosphere

Suspend

Fureteur

Fureteur

Fureteur

ServerS

Page 74: Introduction au WebSockets via le projet Atmosphere

Suspend

Fureteur

Fureteur

Fureteur

ServerS

Page 75: Introduction au WebSockets via le projet Atmosphere

Suspend

Fureteur

Fureteur

Fureteur

ServerS

Page 76: Introduction au WebSockets via le projet Atmosphere

Broadcast

Fureteur

Fureteur

Fureteur

SB

Server

Page 77: Introduction au WebSockets via le projet Atmosphere

Broadcast

Fureteur

Fureteur

Fureteur

SB

Server

Page 78: Introduction au WebSockets via le projet Atmosphere

Resume

Fureteur

Fureteur

Fureteur

B

Server

R

Page 79: Introduction au WebSockets via le projet Atmosphere

Resume

Fureteur

Fureteur

Fureteur

B

ServerS

Page 80: Introduction au WebSockets via le projet Atmosphere

•Default: in-memory

•Nuage

• RedisBroadcaster

• JMSBroadcaster

• XMPPBroadcaster

• HazelcastBroadcaster

• JGroupsBroascaster

•Multi-Threads, Async I/O par default

Broadcaster

Page 81: Introduction au WebSockets via le projet Atmosphere

Broadcaster Nuage

Fureteur

Fureteur

Fureteur S

Server

ServerS

Page 82: Introduction au WebSockets via le projet Atmosphere

Broadcaster Nuage

Fureteur

Fureteur

Fureteur S

Server

ServerS

Page 83: Introduction au WebSockets via le projet Atmosphere

Broadcaster Nuage

Fureteur

Fureteur

Fureteur S

B

Server

ServerS

Page 84: Introduction au WebSockets via le projet Atmosphere

Broadcaster Nuage

Fureteur

Fureteur

Fureteur

BServer

Server

Page 85: Introduction au WebSockets via le projet Atmosphere

Broadcaster Nuage

Fureteur

Fureteur

Fureteur Server

Server

B

Page 86: Introduction au WebSockets via le projet Atmosphere

Broadcaster Nuage

Fureteur

Fureteur

Fureteur Server

Server

Page 87: Introduction au WebSockets via le projet Atmosphere

•WebSocketHandler

• Seulement WebSocket (ATTENTION)!

•AtmosphereHandler

• Tout les protocoles

•Jersey Resource

• Tout les protocoles

•Meteor

• Tout les protocoles

Composantes Atmosphere

Page 88: Introduction au WebSockets via le projet 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

Page 89: Introduction au WebSockets via le projet Atmosphere

Construction d’une appli

Page 90: Introduction au WebSockets via le projet Atmosphere

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

Page 91: Introduction au WebSockets via le projet Atmosphere

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!”

Page 92: Introduction au WebSockets via le projet Atmosphere

Démo

Page 93: Introduction au WebSockets via le projet Atmosphere

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

Page 94: Introduction au WebSockets via le projet Atmosphere

•REST over WebSocket

•Protocole basé sur JSON

•Performance améliorée

•Simple

•Supporte également sur HTTP.

•Supporte le multi requètes/réponses.

SwaggerSocket

Page 95: Introduction au WebSockets via le projet Atmosphere

twitter.com/wordniktwitter.com/atmo_frameworktwitter.com/swaggersocket

http://github.com/Atmosphere/atmospherehttp://github.com/wordnik/

swaggersocket

Powered By Wordnik