SlideShare a Scribd company logo
Writing Portable WebSocket in Java

         Jeanfrancois Arcand

         twitter.com/jfarcand
Pardon?

• Worked 10 years for Sun Microsystems
 •   Active Commiter on Tomcat 4/5
 •   Active Commiter GlassFish 1/2/3
     •   Glassfish v3 extensible container kernel
     •   Performance/Scalability
 •   Creator of the Grizzly NIO Framework
• Creator of the AHC (AsyncHttpClient)
  library
• Creator of Atmosphere
Atmosphere

 Apache 2      Github ~470
               « followers »
                               Client +
 Supported                     server
    ~25
frameworks                     Scala, Groovy,
                                JRuby, Java
 Since 2008
                20 000 downloads per
                       months
1.0.0.beta3
Atmosphere

 Apache 2      Github ~450
               « followers »
                               Client +
 Supported    EXTREMEL
                               server
    ~25        Y ACTIVE
frameworks        !!!          Scala, Groovy,
                                JRuby, Java
 Since2008
                20 000 downloads per
                       months
1.0.0.beta2
Today’s Presentation
     WebSocket
Today’s Presentation
             WebSocket

Definition
Today’s Presentation
             WebSocket

Definition               Free for
                           all!!!
Today’s Presentation
             WebSocket

C’est quoi
Definition               Free for
                         Free for
                           all!!!
                            all!

             Atmospher
                 e
Today’s Presentation
                WebSocket

   Definition               Free for
                              all!

                Atmospher
                    e
Concepts
Today’s Presentation
                WebSocket

   C’est quoi
   Definition               Free for
                              all!!!
                              all!

                Atmospher
                    e
Concepts                    Demo
WebSockets

is a web technology providing for
     bi-directional, full-duplex
   communications channels over a
      single TCP connection. The
        WebSocket API is being
 standardized by the W3C, and the
     WebSocket protocol has been
  standardized by the IETF as RFC
                 6455
Before (Long-Polling)

           Request


Browse                       Server
   r
Before (Long-Polling)

           Request


Browse                       Server
   r
Before (Long-Polling)

           Request


Browse                       Server
   r
          Response
Oups!!


         Request

Browse        None   Server
   r
Oups!

         Request


Browse             Server
   r
                   Zzzz
Better!


         Request

Browse                  Server
   r

                      Cache
Better!

         Request


Browse               Server
   r

                   Cache
Pushing the Protocol (HTTP
          Streaming)
           Request


Browse                   Server
   r
Pushing the Protocol (HTTP
          Streaming)
           Request


Browse                   Server
   r
Pushing the Protocol (HTTP
          Streaming)
           Request


Browse                   Server
   r
          Response
Pushing the Protocol (HTTP
          Streaming)
           Request


Browse                   Server
   r
          Response

          Response
Oups!!

            Request


Browse                 Server
   r
  Hell!!!   Response

            Response
Pushing the Protocol (HTTP
           Streaming)
            Request


Browse                    Server
   r
  Hell!!!
   Hack     Response

            Response
Oups!!!

         Request


Browse              Server
   r
         Response
            Proxy
         Response
Better

         Request


Browse                Server
   r
         Response Cache

         Response
Better

          Request


Browse                 Server
   r
         Response Cache
         « HeartBeat
         Response
              »
Better: Server Side Events (SSE)

            Request


Browse                    Server
   r
           Response

           Response
Oups!!!

         Request


Browse              Server
   r
         Response
            Proxy
         Response
Better

          Request


Browse                 Server
   r
         Response Cache
         « HeartBeat
         Response
              »
WebSockets

          Hanshake


Browse                Server
   r
WebSockets

          Hanshake


Browse                Server
   r
            OK
WebSockets

          Request


Browse                Server
   r
WebSockets

          Request


Browse                Server
   r
WebSockets




Browse                Server
   r
         Response
WebSockets

          Request


Browse                Server
   r
WebSockets

          Request

           Request
Browse                Server
   r
WebSockets

          Request

           Request
Browse                Server
   r
WebSockets




Browse                Server
   r
         Response

         Response
Anytime




Browse              Server
   r
         Response
Life is good, lalalalalala




Browse                        Server
   r
            Response
Oups!!




Browse              Server
   r
         Response
            Proxy
Better!




Browse                Server
   r
         Response Cache
First Request
T 127.0.0.1:65062 -> 127.0.0.1:8080 [AP]
GET / HTTP/1.1.
Upgrade: websocket.
Connection: Upgrade.
Host: 127.0.0.1:8080.
Origin: http://127.0.0.1:8080.
Sec-WebSocket-Key: Tz9qdt3lmte6Slf+GvpRqQ==.
Sec-WebSocket-Version: 13.
Sec-WebSocket-Extensions: x-webkit-deflate-
frame.
Response
T 127.0.0.1:8080 -> 127.0.0.1:51292 [AP]
HTTP/1.1 101 Switching Protocols.
Upgrade: WebSocket.
Connection: Upgrade.
Sec-WebSocket-Accept:
HVXA7SqH5uYeN6aD9tZ0JQbfTJA=.
Life is good, lalalalalala
T 127.0.0.1:8080 -> 127.0.0.1:51292 [AP]
HTTP/1.1 101 Switching Protocols.
Upgrade: WebSocket.
Connection: Upgrade.
Sec-WebSocket-Accept:
HVXA7SqH5uYeN6aD9tZ0JQbfTJA=.
OUPS!!!
T 127.0.0.1:8080 -> 127.0.0.1:65064 [AP]
HTTP/1.1 501 Not Implemented.
Server: Apache-Coyote/1.1.
X-Atmosphere-error: Websocket protocol not
supported.
Transfer-Encoding: chunked.
Date: Fri, 15 Jun 2012 10:06:30 GMT.
Connection: close.
.
WebSocket API – Standard
           JavaScript
websocket = new WebSocket(wsUri);
websocket.onopen = function(evt) { …};
websocket.onclose = function(evt) { …};
websocket.onmessage = function(evt) { …};
websocket.onerror = function(evt) { …};


webSocket.send(…)
WebSocket API – Java

Jetty 7, GlassFish 3.1, Netty 3, Tomcat
7.0.27, Resin 4, JBoss Plugin


JSR 356:
http://jcp.org/en/jsr/detail?id=356


AHC (Client -> De facto)
http://github.com/sonatype/async-http-
client
Life is good,
 lalalalalala
OUPS!!!
Ready?
Safari             Tomcat
                      7
Firefox            Jetty7

                    Jetty8
Chrome

                   GlassFis
Opera                h3.
                   GlassFis
  IE                  h
                     312
Free for all
Safari                   Tomcat
                            7
Firefox                  Jetty7

                          Jetty8
Chrome

                         GlassFis
Opera                      h3.
                         GlassFis
  IE                        h
                           312
Free for all
Safari                   Tomcat
                            7
Firefox                  Jetty7

          Imdat!!         Jetty8
Chrome

                         GlassFis
Opera                      h3.
                         GlassFis
  IE                        h
                           312
Free for all
Safari                         Tomcat
                                  7
          Streamin             Jetty7
Firefox
              g
                Imdat!!         Jetty8
Chrome

                               GlassFis
Opera                            h3.
                               GlassFis
  IE                              h
                                 312
Free for all
Safari                        Tomcat
                                 7
          Streamin            Jetty7
Firefox
              g
                Imdat!!SSE     Jetty8
Chrome

                              GlassFis
Opera                           h3.
                              GlassFis
  IE                             h
                                312
Free for all
Safari                            Tomcat
                                     7
          Streamin                Jetty7
Firefox
              g
                Imdat!!SSE        Jetty8
Chrome

                                GlassFis
Opera                         JSONP
                                  h3.
                                 GlassFis
  IE                                h
                                   312
Free for all
Safari                                 Tomcat
                                          7
           Streamin                    Jetty7
Firefox
               g
                 Imdat!!SSE            Jetty8
Chrome

                                     GlassFis
Opera
           Long                    JSONP
                                       h3.
                                      GlassFis
  IE      Polling                        h
                                        312
Safari                 Tomcat
                          7
Firefox                Jetty7
          Atmosphere
Chrome       to the     Jetty8

           rescue!!!   GlassFis
Opera                    h3.
                       GlassFis
  IE                      h
                         312
Atmosphere -WebSockets

Safari                                        Tomcat
                                                 7
                                              Jetty7




                             Atmosphere API
Firefox
             atmosphere.js
                                               Jetty8
Chrome

                                              GlassFis
Opera                                           h3.
                                              GlassFis
  IE                                             h
                                                312
Atmosphere - HTML5 Server Side
               Events
Safari                                     Tomcat
                                              7
                                           Jetty7




                          Atmosphere API
Firefox
          atmosphere.js
                                           Servlet
Chrome
                                             3
                                           WebLogi
Opera                                        c
                                           GlassFis
  IE                                          h
                                             312
Atmosphere Long-Polling/HTTP
                Streaming
Safari                                        JBoss

                                              Jetty7




                            Atmosphere API
Firefox
            atmosphere.js
                                             Servlet
Chrome
                                               3
                                             WebLogi
Opera                                          c.
                                             GlassFis
  IE                                            h
Atmosphere

Safari                                                   JBoss

                                                         Jetty7




                                       Atmosphere API
Firefox
          atmosphere.js
              Same
Chrome    API, transport                                Servlet
                                                          3
          independent!!                                 WebLogi
Opera                                                     c.
                                                        GlassFis
  IE                                                       h
Socket.IO, GWT, Wicket, JSF, etc.

Safari                                     JBoss

                                           Jetty7




                         Atmosphere API
Firefox
          Socket.IO
                                          Servlet
Chrome
                                            3
                                          WebLogi
Opera                                       c.
                                          GlassFis
  IE                                         h
PORTABLE!!!!!

Safari                                             JBoss

                                                   Jetty7




                                 Atmosphere API
Firefox
          Socket.IO
                      PORTABLE                    Servlet
Chrome
                                                    3
                                                  WebLogi
Opera                                               c.
                                                  GlassFis
  IE                                                 h
Big Big Big Mistake

• Frameworkthat support ONLY
 WebSockets



    Going into
   Production?
  IMPOSSIBLE
Atmosphere
Definition

• Suspend: open a   channel
• Resume: close a   channel
• Broadcast: push   message to one
 or more channel
Components

Atmosphere.js



                Interceptor(s)


                            Handler(s)
Components

Atmosphere.js



   Javascript   Interceptor(s)
     client

                            Handler(s)
Components

Atmosphere.js



                Interceptor(s)

       Intercepts/
          Filters           Handler(s)
Components

Atmosphere.js



                            Application
                Interceptor(s)
                               s Logic


                            Handler(s)
Components

Atmosphere.js
                             Your Servlet



                Interceptor(s)


                          ServletHandler
Components
                          Your Servlet
Atmosphere.js
                            Based
                          Framework

                Interceptor(s)


                          ServletHandler
Components

Atmosphere.js
                ws           Your Servlet



                Interceptor(s)


                          ServletHandler
Components

Atmosphere.js
                ws           Your Servlet
                  ss
                   e
                Interceptor(s)


                          ServletHandler
Components

Atmosphere.js
                ws           Your Servlet
                  ss
                   http
                   e
                Interceptor(s)


                          ServletHandler
Request

Browse
   r


Browse             Server
   r


Browse
   r
Request

Browse
   r


Browse             Server
   r


Browse
   r
Suspend

Browse
   r


Browse             Server
   r


Browse
   r
Suspend

Browse
   r

                   S
Browse              Server
   r


Browse
   r
Suspend

Browse
   r

                   S
Browse              Server
   r


Browse
   r
Suspend

Browse
   r

                   S
Browse              Server
   r


Browse
   r
Broadcast

Browse
   r
                              B
                     S
Browse               Server
   r


Browse
   r
Broadcast

Browse
   r
                              B
                     S
Browse               Server
   r


Browse
   r
Resume

Browse
   r
                               B

Browse                Server
   r              R


Browse
   r
Resume

Browse
   r
                               B

Browse                Server
                  S
   r


Browse
   r
Broadcaster

• Default:    in-memory
• Cloud
 •   RedisBroadcaster
 •   JMSBroadcaster
 •   XMPPBroadcaster
 •   HazelcastBroadcaster
 •   JGroupsBroascaster
• Multi-Threads,        Async I/O par
 default
Broadcaster Cloud

Browse
   r                         S
                             Server

Browse
   r


Browse                   S Server
   r
Broadcaster Cloud

Browse
   r                         S
                             Server

Browse
   r


Browse                   S Server
   r
Broadcaster Cloud

Browse                                B
   r                         S
                             Server

Browse
   r


Browse                   S Server
   r
Broadcaster Cloud

Browse                             B
   r                         Server


Browse
   r


Browse
   r                         Server
Broadcaster Cloud

Browse
   r                         Server


Browse
   r
                                      B
Browse
   r                         Server
Broadcaster Cloud

Browse
   r                         Server


Browse
   r


Browse
   r                         Server
Atmosphere API

• WebSocketHandler
 •   Only WebSocket (WARNING)!
• AtmosphereHandler
 •   All transport
• Jersey   Resource
 •   All transport
• Meteor
 •   All transport
WebSocket Sub Protocol

• WebSocketProtocol
 Define your own websocket protocol


• SimpleHttpProtocol
  WebSocket’s message mapped to HTTP
  POST, avec read/write asynchrone.
• SwaggerSocket:REST over
 WebSockets -> Powerful Protocol
Let’s have some fun
Single Client to Rule Them All




https://github.com/Atmosphere/atmos
phere/blob/master/samples/chat/src/m
 ain/webapp/jquery/application.js#L1
WebSocket


https://github.com/Atmosphere/atmos
phere/blob/master/samples/websocke
                  t-
chat/src/main/java/org/atmosphere/sa
mples/chat/WebSocketChat.java#L33
WebSocket, SSE, long-polling



https://github.com/Atmosphere/atmos
phere/blob/master/samples/chat/src/m
ain/java/org/atmosphere/samples/chat
 /ChatAtmosphereHandler.java#L33
Socket IO


https://github.com/Atmosphere/atmos
phere/blob/master/samples/socketio-
chat/src/main/java/org/atmosphere/sa
mples/chat/SocketIOChatAtmosphere
            Handler.java#L34
Jersey


https://github.com/Atmosphere/atmos
phere/blob/master/samples/sse-rest-
chat/src/main/java/org/atmosphere/sa
mples/chat/jersey/ResourceChat.java
                 #L32
JAXRS 2


https://github.com/Atmosphere/atmos
 phere/blob/master/samples/jaxrs2-
chat/src/main/java/org/atmosphere/sa
mples/chat/jaxrs2/Jaxrs2Chat.java#L3
                  4
SwaggerSocket

• REST over WebSocket
• JSON Based
• Simple
• Works with HTTP
• Multi-Request/Response
Conclusion

       Join the
      Revolution

It’s open source, it’s free to
jumps in!!
twitter.com/jfarcand
      twitter.com/atmo_framework
       twitter.com/swaggersocket

http://github.com/Atmosphere/atmosphere
http://github.com/wordnik/swaggersocket

More Related Content

PPTX
Building WebSocket and Server Side Events Applications using Atmosphere
PPTX
The Atmosphere Framework
PPTX
Websockets on the JVM: Atmosphere to the rescue!
PPT
Writing highly scalable WebSocket using the Atmosphere Framework and Scala
PPTX
0-60 with Goliath: High performance web services
PPTX
0-60 with Goliath: Building High Performance Ruby Web-Services
PDF
Html5 security
PPT
Ruby Proxies for Scale, Performance, and Monitoring - GoGaRuCo - igvita.com
Building WebSocket and Server Side Events Applications using Atmosphere
The Atmosphere Framework
Websockets on the JVM: Atmosphere to the rescue!
Writing highly scalable WebSocket using the Atmosphere Framework and Scala
0-60 with Goliath: High performance web services
0-60 with Goliath: Building High Performance Ruby Web-Services
Html5 security
Ruby Proxies for Scale, Performance, and Monitoring - GoGaRuCo - igvita.com

What's hot (20)

PPTX
Event Driven Architecture - MeshU - Ilya Grigorik
PPTX
No callbacks, No Threads - Cooperative web servers in Ruby 1.9
PPTX
Reverse ajax in 2014
PDF
ApacheCon 2014 - What's New in Apache httpd 2.4
PDF
Building Real-Time Applications with Android and WebSockets
KEY
Deploying Plack Web Applications: OSCON 2011
KEY
The HTML5 WebSocket API
PDF
ApacheConNA 2015: Apache httpd 2.4 Reverse Proxy
PDF
Toster - Understanding the Rails Web Model and Scalability Options
KEY
Pushing the web — WebSockets
KEY
Plack at YAPC::NA 2010
PDF
WebSockets with Spring 4
KEY
Plack at OSCON 2010
KEY
Web frameworks don't matter
PDF
HTML5 WebSocket for the Real-Time Web and the Internet of Things
PDF
Realtime web application with java
PPTX
Web sockets in Java
KEY
Intro to PSGI and Plack
PDF
WebSockets wiith Scala and Play! Framework
PPTX
Solving anything in VCL
Event Driven Architecture - MeshU - Ilya Grigorik
No callbacks, No Threads - Cooperative web servers in Ruby 1.9
Reverse ajax in 2014
ApacheCon 2014 - What's New in Apache httpd 2.4
Building Real-Time Applications with Android and WebSockets
Deploying Plack Web Applications: OSCON 2011
The HTML5 WebSocket API
ApacheConNA 2015: Apache httpd 2.4 Reverse Proxy
Toster - Understanding the Rails Web Model and Scalability Options
Pushing the web — WebSockets
Plack at YAPC::NA 2010
WebSockets with Spring 4
Plack at OSCON 2010
Web frameworks don't matter
HTML5 WebSocket for the Real-Time Web and the Internet of Things
Realtime web application with java
Web sockets in Java
Intro to PSGI and Plack
WebSockets wiith Scala and Play! Framework
Solving anything in VCL
Ad

Similar to Writing Portable WebSockets in Java (20)

PDF
Fisl - Deployment
PDF
Deployment de Rails
PDF
Nuts and Bolts of WebSocket Devoxx 2014
PDF
Understanding the Rails web model and scalability options
PPTX
PDF
NullMQ @ PDX
PDF
Ring: Web Apps in Idiomatic Clojure
PDF
The Real-Time Web (and Other Buzzwords)
 
PDF
Marrying Django and FastAPI - Django Day CPH 2024
PDF
Evolving Archetecture
KEY
Site Performance - From Pinto to Ferrari
PDF
Netapp Michael Galpin
PDF
Websocket shanon
PPTX
Web sockets - Pentesting
PDF
.NET Architects Day - DNAD 2011
PDF
09 - Fábio Akita - Além do rails
KEY
Plone Deployment (PloneConf Edition)
PDF
SaltStack's NetAPI at Photobucket - Denver SaltStack Meetup
KEY
Browser War 2: Standards strikes back
PPTX
Real time web
Fisl - Deployment
Deployment de Rails
Nuts and Bolts of WebSocket Devoxx 2014
Understanding the Rails web model and scalability options
NullMQ @ PDX
Ring: Web Apps in Idiomatic Clojure
The Real-Time Web (and Other Buzzwords)
 
Marrying Django and FastAPI - Django Day CPH 2024
Evolving Archetecture
Site Performance - From Pinto to Ferrari
Netapp Michael Galpin
Websocket shanon
Web sockets - Pentesting
.NET Architects Day - DNAD 2011
09 - Fábio Akita - Além do rails
Plone Deployment (PloneConf Edition)
SaltStack's NetAPI at Photobucket - Denver SaltStack Meetup
Browser War 2: Standards strikes back
Real time web
Ad

Recently uploaded (20)

PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PPTX
Spectroscopy.pptx food analysis technology
DOCX
The AUB Centre for AI in Media Proposal.docx
PDF
Review of recent advances in non-invasive hemoglobin estimation
PDF
Assigned Numbers - 2025 - Bluetooth® Document
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PDF
Machine learning based COVID-19 study performance prediction
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PPTX
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
PDF
Spectral efficient network and resource selection model in 5G networks
PPT
Teaching material agriculture food technology
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PDF
Encapsulation_ Review paper, used for researhc scholars
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PDF
cuic standard and advanced reporting.pdf
PPTX
Machine Learning_overview_presentation.pptx
PDF
Network Security Unit 5.pdf for BCA BBA.
PDF
gpt5_lecture_notes_comprehensive_20250812015547.pdf
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
20250228 LYD VKU AI Blended-Learning.pptx
Spectroscopy.pptx food analysis technology
The AUB Centre for AI in Media Proposal.docx
Review of recent advances in non-invasive hemoglobin estimation
Assigned Numbers - 2025 - Bluetooth® Document
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
Advanced methodologies resolving dimensionality complications for autism neur...
Machine learning based COVID-19 study performance prediction
Chapter 3 Spatial Domain Image Processing.pdf
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
Spectral efficient network and resource selection model in 5G networks
Teaching material agriculture food technology
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
Encapsulation_ Review paper, used for researhc scholars
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
cuic standard and advanced reporting.pdf
Machine Learning_overview_presentation.pptx
Network Security Unit 5.pdf for BCA BBA.
gpt5_lecture_notes_comprehensive_20250812015547.pdf
The Rise and Fall of 3GPP – Time for a Sabbatical?

Writing Portable WebSockets in Java