SlideShare a Scribd company logo
Enhancing Mobile User Experience with WebSocket
Enhancing Mobile User
Experience with WebSocket
Mauricio “Maltron” Leal
maltron@gmail.com
@maltron
WebSocket 101
(The Short Story)
Web Server
(WebSocket compliant)
Endpoint
Client
(WebSocket compliant)
Endpoint
ws://webserver:80/mycontext/endpoint ?
GET /mycontext/endpoint HTTP/1.1
Host: webserver Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: xqBt3ImNzJbYqRINxEFlkg==
Origin: http://client
Sec-WebSocket-Version: 13
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: K7DJLdLooIwIG/MOpvWFB3y3FE8=
Web Server
(WebSocket compliant)
Endpoint
Client
(WebSocket compliant)
Endpoint
HTTP/1.1 101 Switching Protocols
Web Server
(WebSocket compliant)
Endpoint
Client
(WebSocket compliant)
Endpoint
CONNECTED
A connection is established
and “never” closed
Bi-directional & full duplex connection on a
single TCP socket.
It can be secured using SSLIt can be on average, 700 x
faster than AJAX polling.
Web Server
(WebSocket compliant)
Endpoint
Client
(WebSocket compliant)
Endpoint
Message
Web Server
(WebSocket compliant)
Endpoint
Client
(WebSocket compliant)
Endpoint
Message
Endpoint Endpoint
Endpoint
Endpoint
Endpoint
Message
Endpoint
Message
Browser
(Using HTML 5)
Standalone
(Webscoket Client)
Mobile
(HTML 5 Browser)
Mobile
(WebSocket Client)
WebSocket Advanced
(The Geek Story)
Endpoint Endpoint
javax.websocket
Endpoint
javax.websocket
Endpoint
Endpoints represents an object that can handle
websocket conversations.
1 Instance = 1 Thread = 1 Connection
Endpoint
javax.websocket
Endpoint
For each endpoint class, holds lifecycle methods that
may be overridden to intercept a websocket open, error
and close events.
Lifecycle
Methods
Endpoint
javax.websocket
Endpoint
Programmatic Endpoint
public class MyEndpoint extends Endpoint {
@Override
public void onOpen(Session s,
EndpointConfig c) {
// A connection was established
}
@Override
public void onClose(Session s, CloseReason
reason) {}
@Override
public void onError(Session s, Throwable
thr) {}
Endpoint
javax.websocket
Endpoint
Programmatic Endpoint:
Need to create a Message Handler
public class MyEndpoint extends Endpoint {
...
@Override
public void onOpen(Session s,
EndpointConfig c) {
session.addMessageHandler(
new MessageHandler.Whole<String>()) {
@Override
public void onMessage(String m) {
try {
s.getBasicRemote().sendText(“hi”);
} catch(IOException e) {
// Houston: we‟ve got a problem
}
...
Message Handler
Endpoint
javax.websocket
Endpoint
Annotated Endpoint: Much Simpler
@ServerEndpoint(“/endpoint”)
public class MyEndpoint extends Endpoint {
@OnOpen
public void open(Session s) {}
@OnMessage
public void myMessage(String message) {}
@OnClose
public void close(Session s) {}
No need for a
Message Handler
Endpoint Endpoint
javax.websocket
Session
A Session represents a conversation between two
Endpoints.
It captures both Server and
Client State
Endpoint Endpoint
javax.websocket
Session
For sending a simple message to another Endpoint
try {
session.getBasicRemote().sendText(“Hello World”);
} catch(IOException e) {
// Houston: We‟ve got a problem
}
“Hello World”
Endpoint
Endpoint
javax.websocket
Session
try {
for(Session s: session.getOpenSessions())
s.getBasicRemote().sendText(“Hello All”);
} catch(IOException e) {
// Houston: We‟ve got a problem
}
EndpointFor sending the same message to all open Sessions
Endpoint Endpoint
javax.websocket
Session
Some other Session’s methods very useful
boolean isOpen()
boolean isSecure()
void setMaxIdleTimeout(long time)
void addMessageHandler(MessageHandler handler)
: Check if the connection is open
: Check if the connection is secure
: Max Idle Timeout for Inactivity
: Different Message Handlers
Endpoint
Waiting for Message to be delivered: Blocking
...
session.getBasicRemote().sendText(“Hi everyone”);
...
RemoteEndpoint.Basic getBasicRemote()
Endpoint
Create another Thread in order to send it.
...
session.getAsyncRemote().sendText(“Hi everyone”);
...
RemoteEndpoint.Async getAsyncRemote()
Endpoint
Messages can be in different types
RemoteEndpoint.Basic.sendText(String text)
Text Messages
RemoteEndpoint.Basic.sendBinary(ByteBuffer data)
Binary Messages
RemoteEndpoint.sendPing(ByteByffer data)
Ping Frame
RemoteEndpoint.sendPong(ByteBuffer data)
Pong Frame
Endpoint
@ServerEndpoint(“/response”)
public class Response {
@OnMessage
public void textMessage(String msg, Session s) {
System.out.println(“Text:”+msg);
}
@OnMessage
public void binaryMessage(Session s, ByteBuffer msg) {
System.out.println(“Binary:”+msg.toString());
}
@OnMessage
public void pongMessage(Session s, PongMessage msg) {
System.out.println(“Pong:”+msg.getApplicationData().
toString();
}
}
Receiving Different type of Messages
Endpoint Endpoint
public class Person {
private int ID;
public String name;
public String position;
...
POJO
{
“ID”: 2
“name”: “somebody@gmail.com”
“position”: “Developer”
}
JSON
Encoder
JSON
Encoder
Decouples the business logic from serialization and
deserialization
Endpoint Endpoint
public class Person {
private int ID;
public String name;
public String position;
...
POJO
Decoder
JSON
Decoder
{
“ID”: 2
“name”: “somebody@gmail.com”
“position”: “Developer”
}
JSON
Decouples the business logic from serialization and
deserialization
Endpoint Endpoint
o Access details of the initial HTTP request for a connection
You can provide custom configuration on how the
container creates a server endpoint instances.
o Perform custom checks on the Origin HTTP header
o Modify the WebSocket handshake response
o Choose a WebSocket subprotocol
o Control the instantiation and initialization of endpoint
Endpoint EndpointYou can provide custom configuration on how the
container creates a server endpoint instances.
@Override
public void modifyHandshake(ServerEndpointConfig config,
HandshakeRequest request, HandshakeResponse response) {
config.getUserProperties().put(“handshakereq”, req);
}
WebSocket@Mobile
(Sorry, no Windows Mobile)
Using Mobile’s
Browser
Using Native
Implementation
2 Different approaches for using WebSockets
The Connection is
never reliable
On a Mobile Universe
Using a open
connection for a long
time, can drain your
battery rapidly.
In Native apps, use
ONLY when the app
is on foregroud.
Using Mobile’s
Browser
The Good The Bad
No worries about
deployment:
It’s just a website
Not all Mobile Browsers
support WebSockets
Concern about different
version of browsers.
Must be deal with
JavaScript.
The same code for
every device
The Good The Bad
More easy ways to
support older versions of
iOS and Android.
Can’t reuse the same
code: Need to consider
different
implementations
More work on
maintenance
Using Native
Implementation More Control over a
Connection
6.0
6.1
Safari
iOS
Browser
Android
Mini
Opera
Browser
Blackberry
Android
Chrome
Android
Firefox
7.0
5.0
7.0
source: http://caniuse.com/websockets
4.2
4.3
4.4
7.0
10.0 33.0 26.0
Mobile
Opera
12.1
16.0
Support of WebSocktes in Mobile Browsers
function WebSocketTest(){
if ("WebSocket" in window) {
// WebSocket Connection goes here
alert("WebSockets supported
rnrnBrowser: “);
} else {
// the browser doesn't support
alert("WebSockets NOT supported”);
}}
Testing if a WebSocket is supported in your Browser
(Using JavaScript)
$(document).ready(function() {
if( typeof(WebSocket) != "function" ) {
$('body').html("<h1>Error</h1><p>Your
browser does not support Web Sockets.
</p>");
}});
Essentially, just test if WebSocket is defined
or not
var connection = new WebSocket(
„ws://webserver:80/mycontext/endpoint‟);
connection.onopen = function() {
// connection opened
console.log(„connection open‟);
console.send(„Hello World‟);
}
connection.onmessage = function(message) {
console.log(„Received message from server:‟);
console.log(message);
}
A simple JavaScript code using WebSocket
A tool for helping Monitoring WebSocket Traffic: Chrome
Dev Tools
• Open up the Developer Tools
• Switch to the Network tab
• Click on the entry for your
WebSocket connection
• Switch to the Frames tab.
http://developers.google.com/chrome-developer-tool/
Google’s Chrome Dev Tools
Socket Rocket
https://github.com/square/SocketRocket
Unit WebSocket Client
https://code.google.com/p/unit/wiki/UnittWebSocketClient
iOS WebSocket Client Libraries
Recommended
Autobahn Android
http://autobahn.ws/android
WebSocket and Socket.IO
https://github.com/koush/android-websockets
Android WebSocket Client Libraries
Recommended
jWebSocket
https://jwebsocket.org/
Secure WebSockets
https://github.com/palmerc/SecureWebSockets
WebSocket@Show
Possible Scenarios
Enable “fast” notification for a “fast” reaction
• Real Time Notification: Seconds matter
Both iOS and Android has
Notification Systems.
Multiple devices (including mobile) to be in sync with
other sources
• Transfer several messages to be sure if
a device is in sync
• Exchange of several messages are
extremely fast
Enabling people in sharing and interacting in the same
content at the same time.
• Real Time Video Sharing
• Broader collaboration
Mobile Gaming: Synchronize all clients in a Massive
Multiplayer Gaming
• Synchronization of elements in all
clients, through the Server
• Adding instant notifications
• Instant chat between players
Presenting real time information from several sources.
• Instant information to the user
• Capacity to the user to react more
fast
Reading instant patient information and broadcasting to
his doctor
• Monitor life treaty information
• Broadcast to hospital / doctor
Enabling fast awareness in a large environment
• Awareness of other people in real time
• Keep track of living events
Client B
Client A
Connecting to other hardware (Raspberry Pi), which has
the capability of running WebSocket container.
http://developer.kaazing.com/portfolio/real-time-interactions-with-physical-objects-over-the-web/
• Using WebSockets as the default way to
connected to other hardware devices.
• Leveraging you WebSockets know-
how.
WebSocket@DevNation
Real-time collaborative writing:
When WebSocket met Ascii Doctor
4:50 pm
Room: 208
Maxime Gréau
Thank you
Special Thanks: Neto Marin <neto.marin at gmail.com>
maltron@gmail.com
Avaliable on Slideshare.net
http://www.slideshare.net/maltron/enhancing-mobile-user-experience-with-websocket

More Related Content

PDF
Building Real-Time Applications with Android and WebSockets
PDF
WebSockets with Spring 4
PPTX
Websockets and SockJS, Real time chatting
KEY
Pushing the web — WebSockets
PPTX
Web sockets in Java
ZIP
Websocket protocol overview
KEY
The HTML5 WebSocket API
KEY
Dancing with websocket
Building Real-Time Applications with Android and WebSockets
WebSockets with Spring 4
Websockets and SockJS, Real time chatting
Pushing the web — WebSockets
Web sockets in Java
Websocket protocol overview
The HTML5 WebSocket API
Dancing with websocket

What's hot (20)

PPTX
Web rtc, Media stream, Peer connection, Setting up STUN and TURN on Linux and...
PDF
Going Live! with Comet
PPT
HTML5 WebSocket: The New Network Stack for the Web
PDF
Time for Comet?
PPTX
Asynchronous Web Programming with HTML5 WebSockets and Java
PPTX
Building WebSocket and Server Side Events Applications using Atmosphere
PDF
GWT Web Socket and data serialization
PDF
WEB SOCKET 應用
PPTX
WebSockets in JEE 7
PPTX
Websockets on the JVM: Atmosphere to the rescue!
ODP
Real time web (Orbited) at BCNE3
PPTX
Setup ephemeral password for TURN, Learn RTC in less than 200 Lines of code
PPTX
The Atmosphere Framework
PPTX
Intro to WebSockets
PPT
Writing highly scalable WebSocket using the Atmosphere Framework and Scala
PPTX
WebRTC for Managers!
PPTX
Nodejs.meetup
PDF
Measuring Continuity
KEY
A language for the Internet: Why JavaScript and Node.js is right for Internet...
PDF
Real-time Web Application with Socket.IO, Node.js, and Redis
Web rtc, Media stream, Peer connection, Setting up STUN and TURN on Linux and...
Going Live! with Comet
HTML5 WebSocket: The New Network Stack for the Web
Time for Comet?
Asynchronous Web Programming with HTML5 WebSockets and Java
Building WebSocket and Server Side Events Applications using Atmosphere
GWT Web Socket and data serialization
WEB SOCKET 應用
WebSockets in JEE 7
Websockets on the JVM: Atmosphere to the rescue!
Real time web (Orbited) at BCNE3
Setup ephemeral password for TURN, Learn RTC in less than 200 Lines of code
The Atmosphere Framework
Intro to WebSockets
Writing highly scalable WebSocket using the Atmosphere Framework and Scala
WebRTC for Managers!
Nodejs.meetup
Measuring Continuity
A language for the Internet: Why JavaScript and Node.js is right for Internet...
Real-time Web Application with Socket.IO, Node.js, and Redis
Ad

Similar to Enhancing Mobile User Experience with WebSocket (20)

PPS
jWebSocket MobileTechCon 2010 - WebSockets on Android, Symbian and BlackBerry
PPS
Jwebsocketmobiletechcon2010en 100912071225 Phpapp01
PDF
WebSocket Push Fallback - Transcript.pdf
PDF
Building Next Generation Real-Time Web Applications using Websockets
PDF
WebSockets - Realtime em Mundo Conectado
PDF
WebSockets: The Current State of the Most Valuable HTML5 API for Java Developers
PPTX
PDF
DevCon 5 (July 2013) - WebSockets
PPT
JUG louvain websockets
PPTX
vlavrynovych - WebSockets Presentation
PPTX
Training Webinar: Enterprise application performance with server push technol...
PDF
WebSockets wiith Scala and Play! Framework
PPTX
ClientServer Websocket.pptx
PDF
Getting Started with WebSocket and Server-Sent Events using Java - Arun Gupta...
PDF
Getting Started with WebSockets and Server-Sent Events
PDF
Programming WebSockets - OSCON 2010
PPTX
Web Sockets are not Just for Web Browsers
PPTX
WebSockets Everywhere: the Future Transport Protocol for Everything (Almost)
PPTX
Html5 websockets
PPTX
WebSockets-Revolutionizing-Real-Time-Communication.pptx
jWebSocket MobileTechCon 2010 - WebSockets on Android, Symbian and BlackBerry
Jwebsocketmobiletechcon2010en 100912071225 Phpapp01
WebSocket Push Fallback - Transcript.pdf
Building Next Generation Real-Time Web Applications using Websockets
WebSockets - Realtime em Mundo Conectado
WebSockets: The Current State of the Most Valuable HTML5 API for Java Developers
DevCon 5 (July 2013) - WebSockets
JUG louvain websockets
vlavrynovych - WebSockets Presentation
Training Webinar: Enterprise application performance with server push technol...
WebSockets wiith Scala and Play! Framework
ClientServer Websocket.pptx
Getting Started with WebSocket and Server-Sent Events using Java - Arun Gupta...
Getting Started with WebSockets and Server-Sent Events
Programming WebSockets - OSCON 2010
Web Sockets are not Just for Web Browsers
WebSockets Everywhere: the Future Transport Protocol for Everything (Almost)
Html5 websockets
WebSockets-Revolutionizing-Real-Time-Communication.pptx
Ad

More from Mauricio "Maltron" Leal (6)

PDF
Unleash innovation with Red Hat Cloud Management and Modern App Development
PPTX
First Steps in Native Cloud Application
PPTX
Java modules using project jigsaw@jdk 9
PPT
Construindo a sua carreira
PPT
Java EE 6 & Spring: A Lover's Quarrel
PPTX
Remote working / Home Office / Working from Home
Unleash innovation with Red Hat Cloud Management and Modern App Development
First Steps in Native Cloud Application
Java modules using project jigsaw@jdk 9
Construindo a sua carreira
Java EE 6 & Spring: A Lover's Quarrel
Remote working / Home Office / Working from Home

Recently uploaded (20)

PPTX
Introduction to Information and Communication Technology
PDF
Testing WebRTC applications at scale.pdf
PPTX
522797556-Unit-2-Temperature-measurement-1-1.pptx
PPT
tcp ip networks nd ip layering assotred slides
PDF
An introduction to the IFRS (ISSB) Stndards.pdf
PDF
Automated vs Manual WooCommerce to Shopify Migration_ Pros & Cons.pdf
PDF
Paper PDF World Game (s) Great Redesign.pdf
PDF
Vigrab.top – Online Tool for Downloading and Converting Social Media Videos a...
PPTX
Internet___Basics___Styled_ presentation
PDF
Triggering QUIC, presented by Geoff Huston at IETF 123
PPTX
June-4-Sermon-Powerpoint.pptx USE THIS FOR YOUR MOTIVATION
PDF
Decoding a Decade: 10 Years of Applied CTI Discipline
PPTX
Digital Literacy And Online Safety on internet
PPTX
INTERNET------BASICS-------UPDATED PPT PRESENTATION
PDF
RPKI Status Update, presented by Makito Lay at IDNOG 10
PPTX
innovation process that make everything different.pptx
DOCX
Unit-3 cyber security network security of internet system
PPTX
Introduction about ICD -10 and ICD11 on 5.8.25.pptx
PDF
Slides PDF The World Game (s) Eco Economic Epochs.pdf
PPTX
Introuction about ICD -10 and ICD-11 PPT.pptx
Introduction to Information and Communication Technology
Testing WebRTC applications at scale.pdf
522797556-Unit-2-Temperature-measurement-1-1.pptx
tcp ip networks nd ip layering assotred slides
An introduction to the IFRS (ISSB) Stndards.pdf
Automated vs Manual WooCommerce to Shopify Migration_ Pros & Cons.pdf
Paper PDF World Game (s) Great Redesign.pdf
Vigrab.top – Online Tool for Downloading and Converting Social Media Videos a...
Internet___Basics___Styled_ presentation
Triggering QUIC, presented by Geoff Huston at IETF 123
June-4-Sermon-Powerpoint.pptx USE THIS FOR YOUR MOTIVATION
Decoding a Decade: 10 Years of Applied CTI Discipline
Digital Literacy And Online Safety on internet
INTERNET------BASICS-------UPDATED PPT PRESENTATION
RPKI Status Update, presented by Makito Lay at IDNOG 10
innovation process that make everything different.pptx
Unit-3 cyber security network security of internet system
Introduction about ICD -10 and ICD11 on 5.8.25.pptx
Slides PDF The World Game (s) Eco Economic Epochs.pdf
Introuction about ICD -10 and ICD-11 PPT.pptx

Enhancing Mobile User Experience with WebSocket