WebSockets: The Current State of the Most Valuable HTML5 API for Java Developers
-
Upload
viktor-gamov -
Category
Technology
-
view
20.325 -
download
0
description
Transcript of WebSockets: The Current State of the Most Valuable HTML5 API for Java Developers
WEB SOCKETSCURRENT STATE
FOR JAVA DEVELOPERS
CURRENT STATE FOR JAVA DEVELOPERS
Web SOCKETS
VIKTORGAMOV
PRESENTEDBY
WEB SOCKETS
BIT OFHISTORY
MEETTHE WEBSOCKETS
WEBSOCKETSIN ACTION
Q & ASESSION
AGENDA
?
“LEGACY” WEBPOLLING LONG-POLLING STEAMING
OPTIONS FOR “REALTIME” WEB
Browser sends a request to the server and the server keeps the request open for a set period of time. If a notification is received within that period, a response containing the message is sent to the client. If a notification is not received within the set time period, the server sends a response to terminate the open request.
Browser sends a complete request, but the server sends and maintains an open response that is continuously updated and kept open indefinitely (or for a set period of time)
Browser sends HTTP requests at regular intervals and immediately receives a response. However, real- time data is often not that predictable, making unnecessary requests inevitable and as a result, many connections are opened and closed needlessly in low-message-rate situations
WHAT IS WEBSOCKET
“Reducing kilobytes of data to 2 bytes... and reducing latency from 150ms to 50 ms is far more than marginal. In fact, these two factors alone are enough to make WebSocket seriously interesting...”
www.ietf.org/mail-archive/web/hybi/current/msg00784.html
WEB SOCKETSTANDARD PROTOCOL CLIENT-SIDE API SERVER-SIDE API
WHAT IS WEBSOCKETS?
HTML5 specification introduces WebSocket client side object. No plugin required.
True real-time server updates. Expected large penetration in Java world with upcoming JavaEE 7 spec and JSR-356
Websocket is a standardized technology (described in RFC6455) to support low-overhead bidirectional traffic from your Web browser.
1 2 3 4
SEND
UPGRADEREQUEST
RECEIVE
UPGRADERESPONSE
CHANGE
READYSTATETO OPEN
LISTEN
MESSAGEEVENT
WEBSOCKET HANDSHAKE
To Start full-duplex communication client should send UPGRADE request
DEMO
HANDSHAKE DEMO
WEBSOCKET INTERFACE
[Constructor(DOMString url, optional (DOMString or DOMString[]) protocols)]interface WebSocket : EventTarget { readonly attribute DOMString url;
// ready state const unsigned short CONNECTING = 0; const unsigned short OPEN = 1; const unsigned short CLOSING = 2; const unsigned short CLOSED = 3; readonly attribute unsigned short readyState; readonly attribute unsigned long bufferedAmount;
// networking [TreatNonCallableAsNull] attribute Function? onopen; [TreatNonCallableAsNull] attribute Function? onerror; [TreatNonCallableAsNull] attribute Function? onclose; readonly attribute DOMString extensions; readonly attribute DOMString protocol; void close([Clamp] optional unsigned short code, optional DOMString reason);
// messaging [TreatNonCallableAsNull] attribute Function? onmessage; attribute DOMString binaryType; void send(DOMString data); void send(ArrayBufferView data); void send(Blob data);};
CLIENT-SIDE WEBSOCKET API
var ws;if (window.WebSocket) { output("WebSocket supported in your browser"); ws = new WebSocket("ws://www.websockets.org");
// Set event handlers. ws.onopen = function () { output("onopen"); }; ws.onmessage = function (e) { // e.data contains received string. output("echo from server : " + e.data); }; ws.onclose = function () { output("onclose"); }; ws.onerror = function () { output("onerror"); };
}else {output("WebSocket not supported in your browser");}
JAVA EE 7 SERVER-SIDE API
package org.javaee.glassfishwebsocket;
import org.glassfish.websocket.api.annotations.WebSocket;import org.glassfish.websocket.api.annotations.WebSocketMessage;
@WebSocket(path = "/echo")public class EchoBean { @WebSocketMessage public String echo(String message) { System.out.println("##################### Message received"); return message + " (from your server)"; }}
TOMCAT 7.0.29 SERVER-SIDE API
SHOW THE
CODENot enough room for code in this slide ;-)
PROGRAMMING WEBSOCKETS
Client-side frameworks
✦jquery.socket.js✦https://github.com/flowersinthesand/jquery-socket/wiki
✦atmosphere.js✦https://github.com/Atmosphere/atmosphere/wiki/jQuery.atmosphere.js-API
✦socket.io
WEBSOCKET SUPPORT
JAVA-based Web servers with native support.The WebServer has API for WebSocket
✦Netty 3.3.x✦Jetty 7.x, 8.x✦Glassfish 3.1.2✦Tomcat 7.0.27
WHAT SHOULD WE DO?
WE CAN DO IT!
WHAT IS ATMOSPHERE
Atmosphere https://github.com/Atmosphere/atmosphere/
✦portable framework for✦long-polling✦Streaming✦Server-Send Events✦WebSockets
✦can auto select best transport✦abstracting from actual underlying container mechanism
?
THINKING ABOUT USE CASES
OUR CLIENTSUSE CASE
WebSockets really shine with following applications:
✦Live trading/sports ticker✦Controlling medical equipment over the web✦Chat applications✦Multiplayer online games✦Realtime updating social streams
BUNCH OF USEFUL LINKS
✦http://www.w3.org/TR/websockets/ MUST!✦http://tools.ietf.org/html/rfc6455 MUST!✦http://tomcat.apache.org/tomcat-7.0-doc/web-socket-howto.html✦http://websocket-sdk.java.net/Introduction.html✦https://github.com/Atmosphere/atmosphere/wiki/Supported-WebServers-and-Browsers✦http://autobahn.ws/testsuite
Q AND A
Q&APut your questions
WWW.FARATASYSTEMS.COM
CONTACT US
TWITTERWWW.TWITTER.COM/GAMUSSA
GITHUBWWW.GITHUB.COM/GAMUSSA
FIND ME
THANK YOUFOR YOUR ATTENTION
HTTP://WWW.FARATASYSTEMS.COM
THANK YOU