SlideShare une entreprise Scribd logo
1  sur  49
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

Contenu connexe

Tendances

WEB SOCKET 應用
WEB SOCKET 應用WEB SOCKET 應用
WEB SOCKET 應用
Jerromy Lee
 
Real-time Web Application with Socket.IO, Node.js, and Redis
Real-time Web Application with Socket.IO, Node.js, and RedisReal-time Web Application with Socket.IO, Node.js, and Redis
Real-time Web Application with Socket.IO, Node.js, and Redis
York Tsai
 

Tendances (20)

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

Similaire à Enhancing Mobile User Experience with WebSocket

vlavrynovych - WebSockets Presentation
vlavrynovych - WebSockets Presentationvlavrynovych - WebSockets Presentation
vlavrynovych - WebSockets Presentation
Volodymyr Lavrynovych
 
WebSockets: The Current State of the Most Valuable HTML5 API for Java Developers
WebSockets: The Current State of the Most Valuable HTML5 API for Java DevelopersWebSockets: The Current State of the Most Valuable HTML5 API for Java Developers
WebSockets: The Current State of the Most Valuable HTML5 API for Java Developers
Viktor Gamov
 
V2 peter-lubbers-sf-jug-websocket
V2 peter-lubbers-sf-jug-websocketV2 peter-lubbers-sf-jug-websocket
V2 peter-lubbers-sf-jug-websocket
brent bucci
 
Dev con kolkata 2012 websockets
Dev con kolkata 2012   websocketsDev con kolkata 2012   websockets
Dev con kolkata 2012 websockets
SANKARSAN BOSE
 
Unity and WebSockets
Unity and WebSocketsUnity and WebSockets
Unity and WebSockets
Josh Glover
 
Pushing Datatothe Browserwith Comet Ajax W
Pushing Datatothe Browserwith Comet Ajax WPushing Datatothe Browserwith Comet Ajax W
Pushing Datatothe Browserwith Comet Ajax W
rajivmordani
 

Similaire à Enhancing Mobile User Experience with WebSocket (20)

vlavrynovych - WebSockets Presentation
vlavrynovych - WebSockets Presentationvlavrynovych - WebSockets Presentation
vlavrynovych - WebSockets Presentation
 
Jwebsocketmobiletechcon2010en 100912071225 Phpapp01
Jwebsocketmobiletechcon2010en 100912071225 Phpapp01Jwebsocketmobiletechcon2010en 100912071225 Phpapp01
Jwebsocketmobiletechcon2010en 100912071225 Phpapp01
 
jWebSocket MobileTechCon 2010 - WebSockets on Android, Symbian and BlackBerry
jWebSocket MobileTechCon 2010 - WebSockets on Android, Symbian and BlackBerryjWebSocket MobileTechCon 2010 - WebSockets on Android, Symbian and BlackBerry
jWebSocket MobileTechCon 2010 - WebSockets on Android, Symbian and BlackBerry
 
WebSockets: The Current State of the Most Valuable HTML5 API for Java Developers
WebSockets: The Current State of the Most Valuable HTML5 API for Java DevelopersWebSockets: The Current State of the Most Valuable HTML5 API for Java Developers
WebSockets: The Current State of the Most Valuable HTML5 API for Java Developers
 
Nodejs and WebSockets
Nodejs and WebSocketsNodejs and WebSockets
Nodejs and WebSockets
 
Lecture 6 Web Sockets
Lecture 6   Web SocketsLecture 6   Web Sockets
Lecture 6 Web Sockets
 
ServerSentEventsV2.pdf
ServerSentEventsV2.pdfServerSentEventsV2.pdf
ServerSentEventsV2.pdf
 
Building interactivity with websockets
Building interactivity with websocketsBuilding interactivity with websockets
Building interactivity with websockets
 
V2 peter-lubbers-sf-jug-websocket
V2 peter-lubbers-sf-jug-websocketV2 peter-lubbers-sf-jug-websocket
V2 peter-lubbers-sf-jug-websocket
 
5.node js
5.node js5.node js
5.node js
 
Dev con kolkata 2012 websockets
Dev con kolkata 2012   websocketsDev con kolkata 2012   websockets
Dev con kolkata 2012 websockets
 
WebSockets Everywhere: the Future Transport Protocol for Everything (Almost)
WebSockets Everywhere: the Future Transport Protocol for Everything (Almost)WebSockets Everywhere: the Future Transport Protocol for Everything (Almost)
WebSockets Everywhere: the Future Transport Protocol for Everything (Almost)
 
WebSockets Jump Start
WebSockets Jump StartWebSockets Jump Start
WebSockets Jump Start
 
KSDG-iSlide App 開發心得分享
KSDG-iSlide App 開發心得分享KSDG-iSlide App 開發心得分享
KSDG-iSlide App 開發心得分享
 
Html5 websockets
Html5 websocketsHtml5 websockets
Html5 websockets
 
Unity and WebSockets
Unity and WebSocketsUnity and WebSockets
Unity and WebSockets
 
Websocket
WebsocketWebsocket
Websocket
 
Pushing Datatothe Browserwith Comet Ajax W
Pushing Datatothe Browserwith Comet Ajax WPushing Datatothe Browserwith Comet Ajax W
Pushing Datatothe Browserwith Comet Ajax W
 
Socket.io
Socket.ioSocket.io
Socket.io
 
Real-Time with Flowdock
Real-Time with FlowdockReal-Time with Flowdock
Real-Time with Flowdock
 

Dernier

一比一原版奥兹学院毕业证如何办理
一比一原版奥兹学院毕业证如何办理一比一原版奥兹学院毕业证如何办理
一比一原版奥兹学院毕业证如何办理
F
 
一比一原版帝国理工学院毕业证如何办理
一比一原版帝国理工学院毕业证如何办理一比一原版帝国理工学院毕业证如何办理
一比一原版帝国理工学院毕业证如何办理
F
 
Indian Escort in Abu DHabi 0508644382 Abu Dhabi Escorts
Indian Escort in Abu DHabi 0508644382 Abu Dhabi EscortsIndian Escort in Abu DHabi 0508644382 Abu Dhabi Escorts
Indian Escort in Abu DHabi 0508644382 Abu Dhabi Escorts
Monica Sydney
 
Russian Call girls in Abu Dhabi 0508644382 Abu Dhabi Call girls
Russian Call girls in Abu Dhabi 0508644382 Abu Dhabi Call girlsRussian Call girls in Abu Dhabi 0508644382 Abu Dhabi Call girls
Russian Call girls in Abu Dhabi 0508644382 Abu Dhabi Call girls
Monica Sydney
 
哪里办理美国迈阿密大学毕业证(本硕)umiami在读证明存档可查
哪里办理美国迈阿密大学毕业证(本硕)umiami在读证明存档可查哪里办理美国迈阿密大学毕业证(本硕)umiami在读证明存档可查
哪里办理美国迈阿密大学毕业证(本硕)umiami在读证明存档可查
ydyuyu
 
call girls in Anand Vihar (delhi) call me [🔝9953056974🔝] escort service 24X7
call girls in Anand Vihar (delhi) call me [🔝9953056974🔝] escort service 24X7call girls in Anand Vihar (delhi) call me [🔝9953056974🔝] escort service 24X7
call girls in Anand Vihar (delhi) call me [🔝9953056974🔝] escort service 24X7
9953056974 Low Rate Call Girls In Saket, Delhi NCR
 

Dernier (20)

Tadepalligudem Escorts Service Girl ^ 9332606886, WhatsApp Anytime Tadepallig...
Tadepalligudem Escorts Service Girl ^ 9332606886, WhatsApp Anytime Tadepallig...Tadepalligudem Escorts Service Girl ^ 9332606886, WhatsApp Anytime Tadepallig...
Tadepalligudem Escorts Service Girl ^ 9332606886, WhatsApp Anytime Tadepallig...
 
South Bopal [ (Call Girls) in Ahmedabad ₹7.5k Pick Up & Drop With Cash Paymen...
South Bopal [ (Call Girls) in Ahmedabad ₹7.5k Pick Up & Drop With Cash Paymen...South Bopal [ (Call Girls) in Ahmedabad ₹7.5k Pick Up & Drop With Cash Paymen...
South Bopal [ (Call Girls) in Ahmedabad ₹7.5k Pick Up & Drop With Cash Paymen...
 
Down bad crying at the gym t shirtsDown bad crying at the gym t shirts
Down bad crying at the gym t shirtsDown bad crying at the gym t shirtsDown bad crying at the gym t shirtsDown bad crying at the gym t shirts
Down bad crying at the gym t shirtsDown bad crying at the gym t shirts
 
Best SEO Services Company in Dallas | Best SEO Agency Dallas
Best SEO Services Company in Dallas | Best SEO Agency DallasBest SEO Services Company in Dallas | Best SEO Agency Dallas
Best SEO Services Company in Dallas | Best SEO Agency Dallas
 
Real Men Wear Diapers T Shirts sweatshirt
Real Men Wear Diapers T Shirts sweatshirtReal Men Wear Diapers T Shirts sweatshirt
Real Men Wear Diapers T Shirts sweatshirt
 
一比一原版奥兹学院毕业证如何办理
一比一原版奥兹学院毕业证如何办理一比一原版奥兹学院毕业证如何办理
一比一原版奥兹学院毕业证如何办理
 
Story Board.pptxrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
Story Board.pptxrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrStory Board.pptxrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
Story Board.pptxrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
 
一比一原版帝国理工学院毕业证如何办理
一比一原版帝国理工学院毕业证如何办理一比一原版帝国理工学院毕业证如何办理
一比一原版帝国理工学院毕业证如何办理
 
Sensual Call Girls in Tarn Taran Sahib { 9332606886 } VVIP NISHA Call Girls N...
Sensual Call Girls in Tarn Taran Sahib { 9332606886 } VVIP NISHA Call Girls N...Sensual Call Girls in Tarn Taran Sahib { 9332606886 } VVIP NISHA Call Girls N...
Sensual Call Girls in Tarn Taran Sahib { 9332606886 } VVIP NISHA Call Girls N...
 
Local Call Girls in Seoni 9332606886 HOT & SEXY Models beautiful and charmin...
Local Call Girls in Seoni  9332606886 HOT & SEXY Models beautiful and charmin...Local Call Girls in Seoni  9332606886 HOT & SEXY Models beautiful and charmin...
Local Call Girls in Seoni 9332606886 HOT & SEXY Models beautiful and charmin...
 
Indian Escort in Abu DHabi 0508644382 Abu Dhabi Escorts
Indian Escort in Abu DHabi 0508644382 Abu Dhabi EscortsIndian Escort in Abu DHabi 0508644382 Abu Dhabi Escorts
Indian Escort in Abu DHabi 0508644382 Abu Dhabi Escorts
 
PIC Microcontroller Structure & Assembly Language.ppsx
PIC Microcontroller Structure & Assembly Language.ppsxPIC Microcontroller Structure & Assembly Language.ppsx
PIC Microcontroller Structure & Assembly Language.ppsx
 
APNIC Updates presented by Paul Wilson at ARIN 53
APNIC Updates presented by Paul Wilson at ARIN 53APNIC Updates presented by Paul Wilson at ARIN 53
APNIC Updates presented by Paul Wilson at ARIN 53
 
💚 Call Girls Bahraich 9332606886 High Profile Call Girls You Can Get The S...
💚 Call Girls Bahraich   9332606886  High Profile Call Girls You Can Get The S...💚 Call Girls Bahraich   9332606886  High Profile Call Girls You Can Get The S...
💚 Call Girls Bahraich 9332606886 High Profile Call Girls You Can Get The S...
 
Local Call Girls in Gomati 9332606886 HOT & SEXY Models beautiful and charmi...
Local Call Girls in Gomati  9332606886 HOT & SEXY Models beautiful and charmi...Local Call Girls in Gomati  9332606886 HOT & SEXY Models beautiful and charmi...
Local Call Girls in Gomati 9332606886 HOT & SEXY Models beautiful and charmi...
 
"Boost Your Digital Presence: Partner with a Leading SEO Agency"
"Boost Your Digital Presence: Partner with a Leading SEO Agency""Boost Your Digital Presence: Partner with a Leading SEO Agency"
"Boost Your Digital Presence: Partner with a Leading SEO Agency"
 
Russian Call girls in Abu Dhabi 0508644382 Abu Dhabi Call girls
Russian Call girls in Abu Dhabi 0508644382 Abu Dhabi Call girlsRussian Call girls in Abu Dhabi 0508644382 Abu Dhabi Call girls
Russian Call girls in Abu Dhabi 0508644382 Abu Dhabi Call girls
 
20240510 QFM016 Irresponsible AI Reading List April 2024.pdf
20240510 QFM016 Irresponsible AI Reading List April 2024.pdf20240510 QFM016 Irresponsible AI Reading List April 2024.pdf
20240510 QFM016 Irresponsible AI Reading List April 2024.pdf
 
哪里办理美国迈阿密大学毕业证(本硕)umiami在读证明存档可查
哪里办理美国迈阿密大学毕业证(本硕)umiami在读证明存档可查哪里办理美国迈阿密大学毕业证(本硕)umiami在读证明存档可查
哪里办理美国迈阿密大学毕业证(本硕)umiami在读证明存档可查
 
call girls in Anand Vihar (delhi) call me [🔝9953056974🔝] escort service 24X7
call girls in Anand Vihar (delhi) call me [🔝9953056974🔝] escort service 24X7call girls in Anand Vihar (delhi) call me [🔝9953056974🔝] escort service 24X7
call girls in Anand Vihar (delhi) call me [🔝9953056974🔝] escort service 24X7
 

Enhancing Mobile User Experience with WebSocket

  • 1.
  • 2. Enhancing Mobile User Experience with WebSocket Mauricio “Maltron” Leal maltron@gmail.com @maltron
  • 4. 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
  • 5. 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
  • 6. 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.
  • 10. Endpoint Message Browser (Using HTML 5) Standalone (Webscoket Client) Mobile (HTML 5 Browser) Mobile (WebSocket Client)
  • 12. Endpoint Endpoint javax.websocket Endpoint javax.websocket Endpoint Endpoints represents an object that can handle websocket conversations. 1 Instance = 1 Thread = 1 Connection
  • 13. 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
  • 14. 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) {}
  • 15. 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
  • 16. 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
  • 17. Endpoint Endpoint javax.websocket Session A Session represents a conversation between two Endpoints. It captures both Server and Client State
  • 18. 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”
  • 19. 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
  • 20. 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
  • 21. Endpoint Waiting for Message to be delivered: Blocking ... session.getBasicRemote().sendText(“Hi everyone”); ... RemoteEndpoint.Basic getBasicRemote()
  • 22. Endpoint Create another Thread in order to send it. ... session.getAsyncRemote().sendText(“Hi everyone”); ... RemoteEndpoint.Async getAsyncRemote()
  • 23. 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
  • 24. 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
  • 25. 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
  • 26. 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
  • 27. 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
  • 28. 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); }
  • 30. 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.
  • 31. 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
  • 32. 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
  • 34. 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
  • 35. 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
  • 36. 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
  • 37. Socket Rocket https://github.com/square/SocketRocket Unit WebSocket Client https://code.google.com/p/unit/wiki/UnittWebSocketClient iOS WebSocket Client Libraries Recommended
  • 38. 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
  • 40. Enable “fast” notification for a “fast” reaction • Real Time Notification: Seconds matter Both iOS and Android has Notification Systems.
  • 41. 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
  • 42. Enabling people in sharing and interacting in the same content at the same time. • Real Time Video Sharing • Broader collaboration
  • 43. 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
  • 44. Presenting real time information from several sources. • Instant information to the user • Capacity to the user to react more fast
  • 45. Reading instant patient information and broadcasting to his doctor • Monitor life treaty information • Broadcast to hospital / doctor
  • 46. Enabling fast awareness in a large environment • Awareness of other people in real time • Keep track of living events Client B Client A
  • 47. 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.
  • 48. WebSocket@DevNation Real-time collaborative writing: When WebSocket met Ascii Doctor 4:50 pm Room: 208 Maxime Gréau
  • 49. 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