Post on 22-Apr-2015
description
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
INFO@FARATASYSTEMS.COM
CONTACT US
TWITTERWWW.TWITTER.COM/GAMUSSA
GITHUBWWW.GITHUB.COM/GAMUSSA
FIND ME
THANK YOUFOR YOUR ATTENTION
HTTP://WWW.FARATASYSTEMS.COM
THANK YOU