writing portable websockets in java

Post on 24-Jun-2015

2.399 Views

Category:

Technology

2 Downloads

Preview:

Click to see full reader

DESCRIPTION

Write WebSockets Applications using the Atmosphere Framework, deploy them anywhere, with any browsers.

TRANSCRIPT

Writing Portable WebSocket in Java

Jeanfrancois Arcand

twitter.com/jfarcand

Pardon?

•Worked 10 years for Sun Microsystems

• Active Commiter on Tomcat 4/5

• Active Commiter GlassFish 1/2/3

• Glassfish v3 extensible container kernel

• Performance/Scalability

• Creator of the Grizzly NIO Framework

•Creator of the AHC (AsyncHttpClient) library

•Creator of Atmosphere

Atmosphere

Apache 2 Github ~470 « followers »

20 000 downloads per months

Client + serverSupported

~25 framework

s

Scala, Groovy,

JRuby, Java

1.0.0.beta3

Since 2008

Atmosphere

Apache 2 Github ~450 « followers »

20 000 downloads per months

Client + serverSupported

~25 framework

s

Scala, Groovy,

JRuby, Java

1.0.0.beta2

Since2008

EXTREMELY

ACTIVE !!!

Today’s Presentation

WebSocket

Today’s Presentation

WebSocket

Definition

Today’s Presentation

WebSocket

Free for all!!!

Definition

Today’s Presentation

WebSocket

Free for all!

C’est quoi

Atmosphere

Free for all!!!

Definition

Today’s Presentation

WebSocket

Free for all!

Definition

Atmosphere

Concepts

Today’s Presentation

WebSocket

Free for all!

C’est quoi

Atmosphere

DemoConcepts

Free for all!!!

Definition

is a web technology providing for bi-directional, full-duplex

communications channels over a single TCP connection. The WebSocket API is being

standardized by the W3C, and the WebSocket protocol has been

standardized by the IETF as RFC 6455

WebSockets

Before (Long-Polling)

Browser

Server

Request

Before (Long-Polling)

Browser

Request

Server

Before (Long-Polling)

Browser

Request

Response

Server

Oups!!

Browser

ServerNone

Request

Oups!

Browser

Request

Server

Zzzz

Better!

Browser

Server

Cache

Request

Better!

Request

Server

Cache

Response

Browser

Pushing the Protocol (HTTP Streaming)

Browser

Server

Request

Pushing the Protocol (HTTP Streaming)

Browser

Request

Server

Pushing the Protocol (HTTP Streaming)

Browser

Request

Response

Server

Pushing the Protocol (HTTP Streaming)

Browser

Request

Response

Response

Server

Oups!!

Browser

Request

Response

Response

Server

Hell!!!

Pushing the Protocol (HTTP Streaming)

Browser

Request

Response

Response

Server

Hell!!!

Hack

Oups!!!

Browser

Request

Response

Response

Server

Proxy

Better

Browser

Request

Response

Response

Server

Cache

Better

Browser

Request

Response

Response

Server

Cache« HeartBea

t »

Better: Server Side Events (SSE)

Browser

Request

Response

Response

Server

Oups!!!

Browser

Request

Response

Response

Server

Proxy

Better

Browser

Request

Response

Response

Server

Cache« HeartBea

t »

WebSockets

Browser

Server

Hanshake

WebSockets

Browser

Server

Hanshake

OK

WebSockets

Browser

Server

Request

WebSockets

Browser

Request

Server

WebSockets

Browser

Server

Response

WebSockets

Browser

Server

Request

WebSockets

Browser

Server

Request

Request

WebSockets

Browser

Request

Request

Server

WebSockets

Browser

Server

Response

Response

Anytime

Browser

Response

Server

Life is good, lalalalalala

Browser

Response

Server

Oups!!

Browser

Response

Server

Proxy

Better!

Browser

Response

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.

First Request

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=.

Response

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=.

Life is good, lalalalalala

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

Life is good, lalalalalala

OUPS!!!

Ready?

Tomcat7

Jetty7

Jetty8

GlassFish3.

GlassFish

312

Firefox

Safari

Opera

Chrome

IE

Free for all

Tomcat7

Jetty7

Jetty8

GlassFish3.

GlassFish

312

Firefox

Safari

Opera

Chrome

IE

Free for all

Tomcat7

Jetty7

Jetty8

GlassFish3.

GlassFish

312

Firefox

Safari

Opera

Chrome

IE

Imdat!!

Free for all

Tomcat7

Jetty7

Jetty8

GlassFish3.

GlassFish

312

Firefox

Safari

Opera

Chrome

IE

Imdat!!

Streaming

Free for all

Tomcat7

Jetty7

Jetty8

GlassFish3.

GlassFish

312

Firefox

Safari

Opera

Chrome

IE

Imdat!!

Streaming

SSE

Free for all

Tomcat7

Jetty7

Jetty8

GlassFish3.

GlassFish

312

Firefox

Safari

Opera

Chrome

IE

Imdat!!

Streaming

SSE

JSONP

Free for all

Tomcat7

Jetty7

Jetty8

GlassFish3.

GlassFish

312

Firefox

Safari

Opera

Chrome

IE

Imdat!!

Streaming

SSE

Long Polling

JSONP

Tomcat7

Jetty7

Jetty8

GlassFish3.

GlassFish

312

Firefox

Safari

Opera

Chrome

IE

Atmosphere to the

rescue!!!

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

Same API, transport

independent!!

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

•Framework that support ONLY WebSockets

Going into Production?IMPOSSIBLE

Big Big Big Mistake

Atmosphere

•Suspend: open a channel

•Resume: close a channel

•Broadcast: push message to one or more channel

Definition

Components

Handler(s)

Atmosphere.js

Interceptor(s)

Components

Handler(s)

Atmosphere.js

Interceptor(s)

Javascript client

Components

Handler(s)

Atmosphere.js

Interceptor(s)

Intercepts/Filters

Components

Handler(s)

Atmosphere.js

Interceptor(s)

Applications Logic

Components

ServletHandler

Atmosphere.js

Interceptor(s)

Your Servlet

Components

ServletHandler

Atmosphere.js

Interceptor(s)

Your Servlet Based

Framework

Components

ServletHandler

Atmosphere.js

Interceptor(s)

Your Servletws

Components

ServletHandler

Atmosphere.js

Interceptor(s)

Your Servletwssse

Components

ServletHandler

Atmosphere.js

Interceptor(s)

Your Servletwsssehtt

p

Request

Browser

Browser

Browser

Server

Request

Browser

Browser

Browser

Server

Suspend

Browser

Browser

Browser

Server

Suspend

Browser

Browser

Browser

ServerS

Suspend

Browser

Browser

Browser

ServerS

Suspend

Browser

Browser

Browser

ServerS

Broadcast

Browser

Browser

Browser

SB

Server

Broadcast

Browser

Browser

Browser

SB

Server

Resume

Browser

Browser

Browser

B

Server

R

Resume

Browser

Browser

Browser

B

ServerS

•Default: in-memory

•Cloud

• RedisBroadcaster

• JMSBroadcaster

• XMPPBroadcaster

• HazelcastBroadcaster

• JGroupsBroascaster

•Multi-Threads, Async I/O par default

Broadcaster

Broadcaster Cloud

Browser

Browser

Browser S

Server

ServerS

Broadcaster Cloud

Browser

Browser

Browser S

Server

ServerS

Broadcaster Cloud

Browser

Browser

Browser S

B

Server

ServerS

Broadcaster Cloud

Browser

Browser

Browser

BServer

Server

Broadcaster Cloud

Browser

Browser

Browser Server

Server

B

Broadcaster Cloud

Browser

Browser

Browser Server

Server

•WebSocketHandler

• Only WebSocket (WARNING)!

•AtmosphereHandler

• All transport

•Jersey Resource

• All transport

•Meteor

• All transport

Atmosphere API

•WebSocketProtocolDefine your own websocket protocol

•SimpleHttpProtocolWebSocket’s message mapped to HTTP POST, avec read/write asynchrone.

•SwaggerSocket: REST over WebSockets -> Powerful Protocol

WebSocket Sub Protocol

Let’s have some fun

https://github.com/Atmosphere/atmosphere/blob/master/samples/

chat/src/main/webapp/jquery/application.js#L1

Single Client to Rule Them All

https://github.com/Atmosphere/atmosphere/blob/master/samples/websocket-chat/src/main/java/org/

atmosphere/samples/chat/WebSocketChat.java#L33

WebSocket

https://github.com/Atmosphere/atmosphere/blob/master/samples/

chat/src/main/java/org/atmosphere/samples/chat/

ChatAtmosphereHandler.java#L33

WebSocket, SSE, long-polling

https://github.com/Atmosphere/atmosphere/blob/master/samples/socketio-chat/src/main/java/org/

atmosphere/samples/chat/SocketIOChatAtmosphereHandler.jav

a#L34

Socket IO

https://github.com/Atmosphere/atmosphere/blob/master/samples/sse-

rest-chat/src/main/java/org/atmosphere/samples/chat/jersey/

ResourceChat.java#L32

Jersey

https://github.com/Atmosphere/atmosphere/blob/master/samples/

jaxrs2-chat/src/main/java/org/atmosphere/samples/chat/jaxrs2/

Jaxrs2Chat.java#L34

JAXRS 2

•REST over WebSocket

•JSON Based

•Simple

•Works with HTTP

•Multi-Request/Response

SwaggerSocket

Join the Revolution

It’s open source, it’s free to jumps in!!

Conclusion

twitter.com/jfarcand twitter.com/atmo_frameworktwitter.com/swaggersocket

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

swaggersocket

top related