Web sockets in java EE 7 - JavaOne 2013

69
Web Sockets in Java EE 7 Sivasubramaniam Arunachalam May 09, 2013 @sivaa_in https://oraclein.activeevents.com/connect/sessionDetail.ww?SESSION_ID=1081&tclass=popup

description

 

Transcript of Web sockets in java EE 7 - JavaOne 2013

Page 1: Web sockets in java EE 7 - JavaOne 2013

Web Sockets in Java EE 7

Sivasubramaniam Arunachalam

May 09, 2013

@sivaa_in

https://oraclein.activeevents.com/connect/sessionDetail.ww?SESSION_ID=1081&tclass=popup

Page 2: Web sockets in java EE 7 - JavaOne 2013

It’s me!

• Product/Application Developer

• Web/Enterprise/Middleware/B2B

• Java/Java EE, Python/Django

• 2002

• Technical Consultant/Process Mentor

• Member of BOJUG • Speaker

Page 3: Web sockets in java EE 7 - JavaOne 2013

Agenda

• Introduction to Web Sockets

• History

• Protocol Spec

• Adoption

• Java EE 7 Support

• Demo

Page 4: Web sockets in java EE 7 - JavaOne 2013

http://tweetping.net

Let’s warm up

Page 5: Web sockets in java EE 7 - JavaOne 2013

Web 1.0 Web 1.0

Web 2.0

Web 3.0

Page 6: Web sockets in java EE 7 - JavaOne 2013

https://www.facebook.com/sitetour/chat.php

600+ M Active Users/Day

Page 7: Web sockets in java EE 7 - JavaOne 2013

http:// 1991

1995

2013 Still 22 Years Old

http?

Page 8: Web sockets in java EE 7 - JavaOne 2013

http/tcp (1974) (1991)

request / response

~ 2k bytes

~ 150 ms

State less

Page 9: Web sockets in java EE 7 - JavaOne 2013

Real Time Real Time ~

Page 11: Web sockets in java EE 7 - JavaOne 2013

Pull Based (Polling) Periodic Polling (JS/AJAX)

Server Client

SRH 4/0

Latest Score?

Latest Score?

Latest Score?

Same

Same

Latest Score?

SRH 6/0

Latest Score?

Same

Ov 0.1

Ov 0.3

Ov 0.5

Ov 1.1

Ov 1.2

Page 12: Web sockets in java EE 7 - JavaOne 2013

Push Based (Comet) Server Push/Long Polling (JS/AJAX/iframe)

Server Client

SRH 4/0

Latest Score?

Latest Score?

SRH 6/0

Latest Score?

Ov 0.1

Ov 0.2

Ov 1.1

Ov 1.2

Page 13: Web sockets in java EE 7 - JavaOne 2013

• Request / Response

• Too Many

• Server Connections

• Heavy Headers

• Outdated Content

Page 14: Web sockets in java EE 7 - JavaOne 2013

Streaming Server Side Hack

Server Client

SRH 4/0 (1/n)

Latest Score?

SRH 6/0 (2/n)

SRH 146/8 (n/n)

Ov 0.1

Ov 1.1

Ov 20.0

Page 15: Web sockets in java EE 7 - JavaOne 2013

Server Client

SRH 4/0

Latest Score?

SRH 4/0 SRH 6/0 SRH 146/8

Server Buffer

SRH 6/0

SRH 146/8

PROXY

(1/n) (n-1 to go)

(n/n)

(2/n)

(n-2 to go)

Ov 0.1

Ov 1.1

Ov 20.0

Page 16: Web sockets in java EE 7 - JavaOne 2013

• RTMP • Adobe

• Are you Still using Flash?

• RTD • Windows/Excel

• Non Web

Others

Page 17: Web sockets in java EE 7 - JavaOne 2013

Web Sockets (to rescue)

Page 18: Web sockets in java EE 7 - JavaOne 2013

The Web Socket Way The Original Route

Server Client

Hi Client!

Hey Server!

SRH 4/0

Update me the Score

SRH 6/0

SRH 146/8

Not Interested. Bye

Ov 0.1

Ov 1.1

Ov 20.0

Page 19: Web sockets in java EE 7 - JavaOne 2013

Server Client

Hi Client!

Hey Server!

SRH 4/0

Update me the Score

SRH 6/0

SRH 7/0

Not Interested. Bye

Update Over info too

(1.3 ov)

(1.1 ov)

(0.5 ov)

(1.0 ov)

Ov 0.1

Ov 0.5

Ov 1.0

Ov 1.1

Ov 1.2 (1.2 ov)

Ov 1.3

Page 20: Web sockets in java EE 7 - JavaOne 2013

The Background

Page 21: Web sockets in java EE 7 - JavaOne 2013

https://webmq.tavendo.de:9090/help/faq

Let’s Meet Next Year (2014)

Page 22: Web sockets in java EE 7 - JavaOne 2013

Server Side • Hand Shake

• Data Transfer

RFC 6455

Client Side • Java Script API

• Browser Behavior

https://webmq.tavendo.de:9090/help/faq

Page 23: Web sockets in java EE 7 - JavaOne 2013

• tcp • Full Duplex (Bi-Directional)

• Native Browser Support

• No Hacks

• Not Limited to Web

Fundamentals

+ http

Page 24: Web sockets in java EE 7 - JavaOne 2013

• 80 / 443 (plain/secure)

• No Proxy/Firewall pains

• Stream of Messages (Not Bytes)

• ws:// & wss://

• Only ONE Connection (up/down streams)

The Spec

Page 25: Web sockets in java EE 7 - JavaOne 2013

2 Bytes Header (for each message)

Still Why?

~ 50 ms (Latency)

1000 x

3 x

Page 26: Web sockets in java EE 7 - JavaOne 2013

http://www.codeproject.com/Articles/437342/DotNet-WebSocket-Programming

1 Message/Second to each Client

1,000 clients 10,000 clients 1,00,000 clients

Page 27: Web sockets in java EE 7 - JavaOne 2013

• GET (request)

• 101 (response code)

• Not 200 OK

• http:// -> ws://

The Upgrade

RFC 2616 (14.42)

Page 28: Web sockets in java EE 7 - JavaOne 2013

GET /demo HTTP/1.1

Origin : http://sivaa.in

Host : sivaa.in

Connection : Upgrade

Upgrade : WebSocket

WebSocket-Protocol : json, chat, <protocol>

WebSocket-extensions : compression, <extn>

WebSocket-Version : 10

Client Request

Page 29: Web sockets in java EE 7 - JavaOne 2013

HTTP/1.1 101 Switching Protocols

Connection : Upgrade

Upgrade : WebSocket

WebSocket-Protocol : json, chat, <protocol>

WebSocket-Origin : http://sivaa.in

WebSocket-Location : ws://sivaa.in/demo

Server Response

Page 30: Web sockets in java EE 7 - JavaOne 2013

Challenge by Client

Sec-WebSocket-Key : Key (Random 128 bits -> Base 64)

Response By Server

Sec-WebSocket-Accept : Key + GUID* (SHA1)

[NOT FOR SECURITY]

* 258EAFA5-E914-47DA- 95CA-C5AB0DC85B11 (RFC 6455)

Challenge - Response

Page 31: Web sockets in java EE 7 - JavaOne 2013

http://tools.ietf.org/html/rfc6455#page-28

Page 32: Web sockets in java EE 7 - JavaOne 2013

Client / Server Client / Server

Peer <-> Peer

Page 33: Web sockets in java EE 7 - JavaOne 2013

• Frames (TCP) •

• No request / response behavior • No Correlation too

• Independent

• # of requests != # of responses

Data Transfer

Page 34: Web sockets in java EE 7 - JavaOne 2013

• Headers

• Cookies

• Authentication

And No

Page 35: Web sockets in java EE 7 - JavaOne 2013

• Custom Message Patterns

• Technical / Business

• Request / Response • 1 – 1

• 1 to Many

• Acknowledgements

Sub Protocols

Page 37: Web sockets in java EE 7 - JavaOne 2013

Extensions

• Compression

• Multiplexing

• Private Extenstions (x-)

Page 38: Web sockets in java EE 7 - JavaOne 2013

Client -> Ping

Server -> Pong

Ping / Pong

• Keep-Alive

• Heart Beat

• Latency Metrics

• N/W Status Probing

• Detect Failed Connections

Page 39: Web sockets in java EE 7 - JavaOne 2013

Browser Support

http://caniuse.com/websockets

Page 40: Web sockets in java EE 7 - JavaOne 2013

Server Support

IDL (Java Script)

http://www.w3.org/TR/websockets/

Page 41: Web sockets in java EE 7 - JavaOne 2013

http://www.w3.org/TR/websockets/

Page 42: Web sockets in java EE 7 - JavaOne 2013

http://www.w3.org/TR/websockets/

Page 43: Web sockets in java EE 7 - JavaOne 2013

http://www.w3.org/TR/websockets/

Page 44: Web sockets in java EE 7 - JavaOne 2013

http://www.w3.org/TR/websockets/

Page 45: Web sockets in java EE 7 - JavaOne 2013

1. var ws = new WebSocket("ws://sivaa.in/demo");

2. ws.onopen = function() {

ws.send("Hello Server!");

};

3. ws.onmessage = function(event) {

alert("Reply from Server " + event.data);

};

n-1. ws.send("This is the message sent by the client");

n. ws.close()

Developer Friendly

CONNECTING

OPEN

CLOSING

CLOSED

Page 46: Web sockets in java EE 7 - JavaOne 2013

• Closing Long Lived Connections

• Unresponsive Server

• Buffering Server Response

• Non Encryption

• More Latency

The Guards (Proxy / Firewall)

Page 47: Web sockets in java EE 7 - JavaOne 2013

• Web Sockets isn’t Proxy aware

• Stripping HTTP Headers • Upgrade

• Options to disable

• Rejecting Server Response

• Frames (HTTP Headers Expected)

• wss:// - No issues

Web Sockets and

The Guards

Page 48: Web sockets in java EE 7 - JavaOne 2013

• 501

• 301

• Limited Support

• Inconsistent Behavior

The Hidden Blades

Page 49: Web sockets in java EE 7 - JavaOne 2013

• No Polling (0%)

• Low Bandwidth

• Low Latency

• High Interoperability (expected)

Some Marketing Facts

Page 50: Web sockets in java EE 7 - JavaOne 2013

The Vendors (Server/Client/Proxy)

http://static.ibnlive.in.com/ibnlive/pix/slideshow/12-2011/happy-birthday-rajinikaths/rajini-dec11-8.jpg http://media2.intoday.in/indiatoday/images/stories//2012december/rajinikanth_660_121112060009.jpg

Page 51: Web sockets in java EE 7 - JavaOne 2013

• Web Socket

• Flash

• Long Polling

• Multi-Part Streaming

• Forever Frame

• Long Polling JSONP

The Best Approach

Page 52: Web sockets in java EE 7 - JavaOne 2013

• SSE (Server Side Events)

• SPDY

Web Sockets vs

Page 53: Web sockets in java EE 7 - JavaOne 2013

• JSR 356

• Java EE 7

• Tyrus ( http://tyrus.java.net/ )

• Web Socket SDK

• Reference Implementation

Java EE 7 & Web Socket

Page 54: Web sockets in java EE 7 - JavaOne 2013

• Handshake Response to Clients

• Source/Origin Check

• URI Resolving & Matching

• Sub Protocols Negotiation

• Extension Negotiation

Server Side Capabilities (Expected)

Page 55: Web sockets in java EE 7 - JavaOne 2013

Handlers Handler Purpose

End Point To handle life cycle events

Session To represent currently active session

Remote End Point To represent a peer

Message Handler To handle incoming messages

Error Handler Handler for error scenarios

Page 56: Web sockets in java EE 7 - JavaOne 2013

• Interface Driven

• Annotation Driven

Models

Page 57: Web sockets in java EE 7 - JavaOne 2013

• Text Based

• Binary

• Ping/Pong

Message Types

Page 58: Web sockets in java EE 7 - JavaOne 2013

• Text

• TextStream

• Binary

• BinaryStream

Encoders/Decoders

Page 59: Web sockets in java EE 7 - JavaOne 2013

• javax.websocket.*

• javax.websocket.server.*

• javax.net.websocket.*

Packages

Page 60: Web sockets in java EE 7 - JavaOne 2013

Recent Refactoring Changes

https://blogs.oracle.com/PavelBucek/entry/tyrus_1_0_b12_released (Feb 27, 2013)

Page 61: Web sockets in java EE 7 - JavaOne 2013

Web Sockets & Servlet 3.1

• HTTP Upgrade

• HttpServletRequest.upgrade()

• javax.servlet.http.HttpUpgradeHandler

• javax.servlet.http.WebConnection

Page 62: Web sockets in java EE 7 - JavaOne 2013

• Apache Tomcat 7

• GlassFish 3.1

• Jetty 7

• JBoss 7 • And much more

Web Server Support

https://java.net/projects/websocket-spec/pages/WebSocketAPIs

17+

Page 63: Web sockets in java EE 7 - JavaOne 2013

• Annotations / Interface

• Reference Implementation

• Web Sockets SDK / mvn

• Samples to Begin with

GlassFish

Page 64: Web sockets in java EE 7 - JavaOne 2013

Lets Play!

Page 65: Web sockets in java EE 7 - JavaOne 2013

• Subversion (svn)

• Maven (mvn)

• NetBeans IDE (7.3)

• Glassfish Promoted Build (latest)

Tools (which I use)

Page 67: Web sockets in java EE 7 - JavaOne 2013

Demo

Page 68: Web sockets in java EE 7 - JavaOne 2013

Thank You! [email protected]

bit.ly/sivasubramaniam bit.ly/sivaa_in

Page 69: Web sockets in java EE 7 - JavaOne 2013

References

• http://www.inc.com/ss/brief-history-time-management#7 • http://resources3.news.com.au/images/2013/01/30/1226564/845955-tim-berners-lee.jpg • http://netdna.webdesignerdepot.com/uploads/2009/01/macii.jpg#old%20apple%20computer%20559x450 • http://3.bp.blogspot.com/_zVkfb2MIt4A/S8f_qzhuhRI/AAAAAAAAAjg/2idf7_G4wxo/s1600/apple-imac.png • http://www.softwareforeducation.com/wikileki/images/c/c4/Simplex-half-full.gif • http://www.mediafly.com/wp-content/uploads/Speed_Rocket-2.png • http://weaponsman.com/wp-content/uploads/2013/01/thumbs-down.png • http://m.flikie.com/ImageData/WallPapers/d1bef9f8be6d479387953929c766699a.jpg • http://www.tavendo.de/webmq/resources/faq • http://deadliestwebattacks.com/tag/websocket/ • http://en.wikipedia.org/wiki/WebSocket • http://www.infoq.com/articles/Web-Sockets-Proxy-Servers • http://media2.intoday.in/indiatoday/images/stories//2012december/rajinikanth_660_121112060009.jpg