SlideShare a Scribd company logo
1 of 39
Download to read offline
DDS on the Web
                 Quick Recipes for Real-Time Web Applications
OpenSplice DDS




                                               Angelo CORSARO, Ph.D.
                                                      Chief Technology Officer
                                                      OMG DDS Sig Co-Chair
                                                                 PrismTech
                                              angelo.corsaro@prismtech.com
The Rise of the Real-Time Web
                  ☐   It can be argued that Browsers are becoming today the Virtual
                      Machine of the Web -- as opposed to simply a rendering engine




                                                                                             Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                  ☐   The introduction of HTML5 and related standards, such as
                      WebSockets, has furthered this trend providing an increasingly
                      compelling platform for the development of device/browser
OpenSplice DDS




                      independent applications
                  ☐   In addition, new standards like WebSockets are making it possible
                      for web application to send and receive data by completely
                      bypassing HTTP
                  ☐   These innovations, are making it possible to have highly-interactive
                      real-time web applications that can push data very efficiently
DDS and Real-Time Web App
                      DDS is used today to in a large class of mission and business critical




                                                                                               Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                  ☐
                      applications, such as Air Traffic Control and Management, SCADA,
                      Smart Grid, Smart Cities, Trading, etc., to share data in real-time

                      Many of the systems using DDS today increasingly need to expose
OpenSplice DDS




                  ☐
                      application to mobile devices, thus entering on the Native-App vs.
                      Web-App dilemma

                  ☐   The introduction of HTML5 and WebSockets makes it possible today
                      to push real-time DDS traffic to a WebBrowser and vice-versa
Server Side Technologies
OpenSplice DDS
Exposing DDS Data to Web Apps




                                                                                               Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                  ☐   Several different approaches exist to expose DDS data to Web Apps

                  ☐   WebSocket are the most natural approach, especially for
                      applications requiring relatively low latency
OpenSplice DDS




                  ☐   Polling or HTTP Streaming frameworks, such as CometD, can also be
                      used, but are less efficient both in terms of throughput as well as in
                      terms of latency

                  ☐   Here we focus on WebSockets
From DDS to WebSockets
                  There are several approaches that can be taken to provide DDS traffic over




                                                                                                       Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                  Web Sockets:
                  ☐   The OpenSplice Gateway provides probably the most natural way of
                      integrating DDS with WebSockets is through route definitions
OpenSplice DDS




                  ☐   The Play! Framework is probably the best choice for those that along using
                      WebSockets and DDS want to use DDS as a back-end technology (e.g. for
                      scale-out, caching, etc.)
                  ☐   Netty is yet another possibility, but the one that requires you to do the most
                      work in term of integrating DDS with WebSockets. At the same time gives
                      you complete control
OpenSplice DDS




                 WebSockets
HTML5 WebSockets




                                                                                         Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                  ☐   The WebSockets specification defines an API that enables web
                      pages to use the WebSockets protocol for two-way
                      communication with a remote host
OpenSplice DDS




                  ☐   WebSockets greatly reduce network traffic and latency compared
                      to HTTP polling and long-polling techniques commonly used to
                      simulate a full-duplex connection by maintaining two connections

                  ☐   WebSockets are capable of traversing firewalls and proxies
WebSocket Protocol
                  ☐   The WebSocket protocol is designed to work well with the existing Web




                                                                                               Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                      infrastructure

                  ☐   The WebSocket connection starts as an HTTP connection which then is
                      upgraded by replacing the HTTP connection with the WebSocket
OpenSplice DDS




                      connection over the same underlying TCP/IP connection

                  ☐   Once connected, WebSocket data frames can be sent back and
                      forth between the client and the server in full-duplex mode

                  ☐   Text and Binary frames are supported. The data is framed with just two
                      bytes
WebSocket API
                    [Constructor(in DOMString url, optional in DOMString protocol)]
                            interface WebSocket {
                               readonly attribute DOMString URL;
                               // ready state




                                                                                      Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                               const unsigned short CONNECTING = 0;
                               const unsigned short OPEN = 1;
                               const unsigned short CLOSED = 2;
                               readonly attribute unsigned short readyState;
                               readonly attribute unsigned long bufferedAmount;
OpenSplice DDS




                                 // networking
                                 attribute Function onopen;
                                 attribute Function onmessage;
                                 attribute Function onclose;
                                 boolean send(in DOMString data);
                                 void close();
                            };

                            WebSocket implements EventTarget;
DDS/WebSockets
                 OpenSplice Gateway
OpenSplice DDS
OpenSplice Gateway
                  ☐   Provides DDS applications with unprecedented                      JMS




                                                                                                             Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                      integration capabilities by supporting high
                      performance format and content




                                                                                                  XM
                                                                                ST




                                                                                                     PP
                                                                               RE
                      transformation, routing and QoS mediation                         OpenSplice

                                                                                     Gateway
                      Leverages Apache Camel integration




                                                                                                       P
                                                                              Cu
                  ☐




                                                                                                     AMQ
                                                                               sto
                      framework and its support for over 80
OpenSplice DDS




                                                                                m
                      connectors
                                                                                      DDSI-RTPS
                  ☐    OpenSplice Gateway is the best choice for
                      integrating DDS-interoperable applications with
                      proprietary as well as standard-based             Supported Connectors Include:
                      messaging technologies, such as JMS and           - JMS                  - HTTP
                      AMQP, as well as user applications leveraging     - REST                 - AMQP
                                                                        - CometD               - XMPP
                      Web standards such as  W3C Web Services,          - CFX                  - Hibernate
                      REST and HTML5 WebSockets                         - TCP & UDP Sockets    - Custom
Architecture
                         OpenSplice
                          Gateway
                   Based on                  camel-ospl




                                                          Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                 •


                   DataReader &              Component
                   DataWriter
                 •
                   Typed data           OpenSplice DDS

                 •
                   No native or              camel-ddsi
                   generated code            Component
                 •
                   No marshalling
OpenSplice DDS




                 (raw data buffer)      JDDSI


                 Camel DDS Processors


                 •
                     DDSI demarshaller /
                     marshaller
                 •
                     Data transformation
                 •
                     Dynamic Poll Enricher
                 •
                     QoS adaptations
WebSocket Integration
                  1   // Define endpoints
                  2      val inEndpoint =




                                                                                                                         Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                  3        "ddsi:"+ inTopic +":"+ inDomain +"/" + shapeType
                  4      val outEndpoint =
                  5        "websocket://"+inTopic.toLowerCase + "?sendToAll=true"
                  6
                  7      // Define a Route using the Scala DSL
                  8      val shapesRoute = new RouteBuilder {
                  9        override def configure() =
                                                                                                               To JSON
OpenSplice DDS




                 10          from(inEndpoint) unmarshal("cdr") marshal() json() to(outEndpoint)
                 11      }




                                                                                                     Topic
                                                                                                    “Circle”


                 ☐    This example requires Camel 2.10                                              DDS
                                                                                                  Domain 0
WebSocket Integration
                  1   // Define endpoints
                  2      val inEndpoint =




                                                                                                          Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                  3        "websocket://"+inTopic.toLowerCase
                  4      val outEndpoint =
                  5        "ddsi:"+ inTopic +":"+ inDomain +"/" + shapeType
                  6
                  7      // Define a Route using the Scala DSL
                  8      val shapesRoute = new RouteBuilder {
                  9        override def configure() =
                                                                                                To POJO
OpenSplice DDS




                 10          from(inEndpoint) unmarshal() json() to(outEndpoint)
                 11      }




                                                                                      Topic
                                                                                     “Circle”


                 ☐    This example requires Camel 2.10                               DDS
                                                                                   Domain 0
OpenSplice DDS




   - Live Demo -
DDS/WebSockets
                 Play! Framework
OpenSplice DDS
The Play! Framework
                  ☐   Play! is a Web Application Framework
                      based on a lightweight, stateless, web-




                                                                  Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                      friendly architecture
                  ☐   Play! features predictable and minimal
                      resource consumption (CPU, memory,
OpenSplice DDS




                      threads) for highly-scalable applications
                      thanks to its reactive model, based on
                      Iteratee IO
                  ☐   The Play! Framework:
                      ☐   Supports asynchronous programming
                      ☐   Focuses on Type Safety
                      ☐   Native support for Java and Scala
                      ☐   Support for HTML5 and WebSocket
Play! and MVC Pattern




                                                                                            Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                  ☐   Play! is based on the Model View Controller Pattern so to cleanly
                      separate the presentation, control and business logic
OpenSplice DDS




                  ☐   Play! uses routes to map incoming HTTP requests to actions. Actions
                      are implemented as Java or Scala methods
Anatomy of a Play! Application




                                                  Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                  ☐   The organization of a
                      Play! applications
OpenSplice DDS




                      makes apparent its
                      MVC approach
WebSockets in Play!
                  Using WebSockets with Play! is very straight-forward as all it




                                                                                               Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                  requires is to:

                  ☐   Route incoming HTTP GET request to the controller that will
                      establish a WebSocket Connection
OpenSplice DDS




                          # Home page
                          GET     /                          controllers.Application.index
                          GET     /ishapes                   controllers.Application.ishapes


                  ☐   Use the Play! Iteratee API for asynchronously deal with
                      incoming messages
                           def ishapes = WebSocket.using[String] { request => ... }
Play!ng with iShapes
OpenSplice DDS




                    - Live Demo -
Client Side Technologies
OpenSplice DDS
OpenSplice DDS




       ☐
                ☐
                                         ☐




       Dart
                                      JavaScript

              CoffeeScript
                                                                                          Client Side Technologies




                 Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
JavaScript




                                                                                            Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                  ☐   JavaScript is the most widely used client technology for web-
                      applications

                  ☐   The plus of JavaScript are the many powerful frameworks that exist,
OpenSplice DDS




                      such as DOJO, JQuery, etc/

                  ☐   The minus is the programming language itself, which is verbose and
                      lacking few constructs for facilitating large scale software
                      development
Coffescript




                                                                                             Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                  ☐   CoffeeScript is a is a relatively little language that improves
                      JavaScript usability and introduces some functional programming
                      mechanism, e.g. lambdas and comprehension, in a concise and
                      elegant manners
OpenSplice DDS




                  ☐   CoffeeScript compiles to JavaScript and the compiled JavaScript is
                      readable and pretty-printed, passes through JavaScript Lint
                      without warnings, will work in every JavaScript runtime, and tends
                      to run as fast or faster than the equivalent handwritten JavaScript.

                                                    http://coffeescript.org/
CoffeScript Overview
                                        CoffeScript                    JavaScript




                                                                                            Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                               square = (x) -> x * x           square = function(x) {
                 # Functions
                                                                  return x * x;
                                                               };
OpenSplice DDS




                               math =                          math = {
                 # Objects       root:   Math.sqrt                root: Math.sqrt,
                                 square: square                   square: square,
                                 cube:   (x) -> x * square x      cube: function(x) {
                                                                    return x * square(x);
                                                                  }
                                                               };
CoffeScript Overview
                                           CoffeScript                        JavaScript




                                                                                                          Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                                                                     cubes = (function() {
                 # Array         cubes =                               var _i, _len, _results;
                 Comprehension     (math.cube num for num in list)     _results = [];
                                                                       for (_i = 0,
                                                                            _len = list.length;
OpenSplice DDS




                                                                            _i < _len; _i++) {
                                                                         num = list[_i];
                                                                         _results.push(math.cube(num));
                                                                       }
                                                                       return _results;
                                                                     })();
Dart
                      Dart is a new class-based programming language for creating




                                                                                           Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                  ☐
                      structured web applications

                  ☐   The main goal of Dart is that of making it simple and more
                      productive to write large-scale web applications
OpenSplice DDS




                  ☐   Dart code can be run natively on some browsers (like Chromium), it
                      can be compiled to JavaScript, or it can be run standalone on the
                      DartVM


                                                    http://www.dartlang.org/
Dart Overview: Type System
                                                          class Point {
                                                            var x, y;




                                                                                                              Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                                                            Point(this.x, this.y);
                                                            scale(factor) => new Point(x*factor, y*factor);

                  Optional Types                            distance() => Math.sqrt(x*x + y*y);
                                                          }

                  ☐ Dart allows a mixture of static       main() {
                                                            var a = new Point(2,3).scale(10);
                    and dynamic type checking               print(a.distance());
OpenSplice DDS




                                                          }


                  ☐   It is possible to only use static   class Point {
                                                            num x, y;
                      typing, dynamic typing or             Point(num this.x, num this.y);
                                                            Point scale(num factor) =>
                      mixing the two                           new Point(x*factor, y*factor);
                                                            num distance() => Math.sqrt(x*x + y*y);
                                                          }

                                                          void main() {
                                                            Point a = new Point(2,3).scale(10);
                                                            print(a.distance());
                                                          }
Dart Overview: Type System
                  Generics




                                                                                                    Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                  ☐ Dart provides support for
                    Generic Types
                  ☐ However, as Dart has optional
                                                     var names = new List<int>();
                    types, it is not mandatory to    names.addAll([1, 2, 3, 4, 5]);
OpenSplice DDS




                                                     names.add(“foo”); // Fails in checked mode
                    use generic type annotations                       // (succeeds in production
                                                                       // mode).
                  ☐   At the same time taking
                      advantage of the Generic
                      support is useful to produce
                      code whose intent is clearer
                      and whose types error can be
                      easily checked with tools
Dart Overview: OOP
                  ☐   Interfaces and Classes




                                                                                                      Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                      provide a set of reusable       interface Shape {
                      and extensible building         }
                                                        num perimeter();

                      blocks.
                                                      class Rectangle implements Shape {
OpenSplice DDS




                                                        final num height, width;
                  ☐   An interface defines a set of     Rectangle(num this.height, num this.width);
                                                        num perimeter() => 2*height + 2*width;
                      methods and constants           }

                                                      class Square extends Rectangle {
                  ☐   A class can implement           }
                                                        Square(num size) : super(size, size);

                      multiple interfaces, but it
                      only inherits from a single
                      superclass
Dart Overview: FP




                                                                                       Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                                                         List<int> l = [1,2,3,4,5];
                  ☐   Dart provides some functional      l.forEach((i) => print(i));
OpenSplice DDS




                      programming mechanisms such
                                                         var l2 = l.map((i) => i*i);
                      as lamdas and list comprehension   l2.forEach(print);
Dart & DDS in Action
OpenSplice DDS




                    - Live Demo -
OpenSplice DDS




                 Summing Up
Concluding Remarks
                  ☐   Web Technologies are becoming more and more relevant for any
                      kind of system




                                                                                               Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                  ☐   Latest innovation on Web Technologies have made it possible to
                      have real-time web applications
OpenSplice DDS




                  ☐   Existing DDS applications can easily expose their data to Real-Time
                      Web Applications taking advantage of several powerful
                      technologies such as the OpenSplice Gateway and the Play!
                      Framework

                  ☐   Lots of innovation in Client Technologies to make it easier to develop
                      web-applications that look, feel and perform as native applications
References




                                                                                                                          Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                  OpenSplice | DDS                                                    Escalier
                  ¥ #1 OMG DDS Implementation   ¥ Fastest growing JVM Language      ¥ Scala API for OpenSplice DDS
                  ¥ Open Source                 ¥ Open Source                       ¥ Open Source
                  ¥ www.opensplice.org          ¥ www.scala-lang.org                ¥ github.com/kydos/escalier
OpenSplice DDS




                 ¥ Simple C++ API for DDS       ¥ DDS-PSM-Java for OpenSplice DDS   ¥ DDS-based Advanced Distributed
                 ¥ Open Source                  ¥ Open Source                          Algorithms Toolkit
                 ¥ github.com/kydos/simd-cxx    ¥ github.com/kydos/simd-java        ¥ Open Source
                                                                                      ¥ github.com/kydos/dada
:: Connect with Us ::



                   ¥opensplice.com             ¥forums.opensplice.org
                                                                                         ¥@acorsaro
                   ¥opensplice.org             ¥opensplicedds@prismtech.com                 ¥@prismtech
OpenSplice DDS




                                                                                         ¥ crc@prismtech.com
                                                                                         ¥sales@prismtech.com
                 ¥youtube.com/opensplicetube          ¥slideshare.net/angelo.corsaro
OpenSplice DDS

More Related Content

What's hot (20)

Chapter12
Chapter12Chapter12
Chapter12
 
Transport Layer
Transport LayerTransport Layer
Transport Layer
 
The DDS Security Standard
The DDS Security StandardThe DDS Security Standard
The DDS Security Standard
 
Multicast routing protocols in adhoc networks
Multicast routing protocols in adhoc networksMulticast routing protocols in adhoc networks
Multicast routing protocols in adhoc networks
 
DDS: The IoT Data Sharing Standard
DDS: The IoT Data Sharing StandardDDS: The IoT Data Sharing Standard
DDS: The IoT Data Sharing Standard
 
Simple Mail Transfer Protocol
Simple Mail Transfer ProtocolSimple Mail Transfer Protocol
Simple Mail Transfer Protocol
 
OSI model (7 LAYER )
OSI model (7 LAYER )OSI model (7 LAYER )
OSI model (7 LAYER )
 
Chapter 5-IT infrastructure(REV 2.0).pptx
Chapter 5-IT infrastructure(REV 2.0).pptxChapter 5-IT infrastructure(REV 2.0).pptx
Chapter 5-IT infrastructure(REV 2.0).pptx
 
Network Topology
Network TopologyNetwork Topology
Network Topology
 
Packet Tracer
Packet TracerPacket Tracer
Packet Tracer
 
Chapter08
Chapter08Chapter08
Chapter08
 
Application layer protocols
Application layer protocolsApplication layer protocols
Application layer protocols
 
Programming TCP/IP with Sockets
Programming TCP/IP with SocketsProgramming TCP/IP with Sockets
Programming TCP/IP with Sockets
 
Ccna notes
Ccna notesCcna notes
Ccna notes
 
Network topology And Its Types
Network topology And Its Types Network topology And Its Types
Network topology And Its Types
 
UNIT I.ppt
UNIT I.pptUNIT I.ppt
UNIT I.ppt
 
InternetWorking With TCP\IP
InternetWorking With TCP\IPInternetWorking With TCP\IP
InternetWorking With TCP\IP
 
It6601 mobile computing unit 4
It6601 mobile computing unit 4It6601 mobile computing unit 4
It6601 mobile computing unit 4
 
CCNA RS_ITN - Chapter 1
CCNA RS_ITN - Chapter 1CCNA RS_ITN - Chapter 1
CCNA RS_ITN - Chapter 1
 
Internet Access via Cable TV Network
Internet Access via Cable TV NetworkInternet Access via Cable TV Network
Internet Access via Cable TV Network
 

Viewers also liked

10 Reasons for Choosing OpenSplice DDS
10 Reasons for Choosing OpenSplice DDS10 Reasons for Choosing OpenSplice DDS
10 Reasons for Choosing OpenSplice DDSAngelo Corsaro
 
Building Real-Time Web Applications with Vortex-Web
Building Real-Time Web Applications with Vortex-WebBuilding Real-Time Web Applications with Vortex-Web
Building Real-Time Web Applications with Vortex-WebAngelo Corsaro
 
Getting Started with DDS in C++, Java and Scala
Getting Started with DDS in C++, Java and ScalaGetting Started with DDS in C++, Java and Scala
Getting Started with DDS in C++, Java and ScalaAngelo Corsaro
 
Principles of the Play framework
Principles of the Play frameworkPrinciples of the Play framework
Principles of the Play frameworkBernhard Huemer
 
Web application development using Play Framework (with Java)
Web application development using Play Framework (with Java)Web application development using Play Framework (with Java)
Web application development using Play Framework (with Java)Saeed Zarinfam
 
Comparison of MQTT and DDS as M2M Protocols for the Internet of Things
Comparison of MQTT and DDS as M2M Protocols for the Internet of ThingsComparison of MQTT and DDS as M2M Protocols for the Internet of Things
Comparison of MQTT and DDS as M2M Protocols for the Internet of ThingsReal-Time Innovations (RTI)
 
Play Framework: async I/O with Java and Scala
Play Framework: async I/O with Java and ScalaPlay Framework: async I/O with Java and Scala
Play Framework: async I/O with Java and ScalaYevgeniy Brikman
 
Ralph Capabilities Deck RR
Ralph Capabilities Deck RRRalph Capabilities Deck RR
Ralph Capabilities Deck RRJay Armitage
 
Sarah Robins Powell resume/work sample
Sarah Robins Powell resume/work sampleSarah Robins Powell resume/work sample
Sarah Robins Powell resume/work samplesayster
 
Inside a Computer
Inside a ComputerInside a Computer
Inside a ComputerSMumford
 
Free/Open Source Software
Free/Open Source SoftwareFree/Open Source Software
Free/Open Source SoftwareAngelo Corsaro
 

Viewers also liked (20)

DDS Web Enabled
DDS Web EnabledDDS Web Enabled
DDS Web Enabled
 
DDS Everywhere
DDS EverywhereDDS Everywhere
DDS Everywhere
 
10 Reasons for Choosing OpenSplice DDS
10 Reasons for Choosing OpenSplice DDS10 Reasons for Choosing OpenSplice DDS
10 Reasons for Choosing OpenSplice DDS
 
Building Real-Time Web Applications with Vortex-Web
Building Real-Time Web Applications with Vortex-WebBuilding Real-Time Web Applications with Vortex-Web
Building Real-Time Web Applications with Vortex-Web
 
Getting Started with DDS in C++, Java and Scala
Getting Started with DDS in C++, Java and ScalaGetting Started with DDS in C++, Java and Scala
Getting Started with DDS in C++, Java and Scala
 
Best Practices Using RTI Connext DDS
Best Practices Using RTI Connext DDSBest Practices Using RTI Connext DDS
Best Practices Using RTI Connext DDS
 
Principles of the Play framework
Principles of the Play frameworkPrinciples of the Play framework
Principles of the Play framework
 
DDS Over Low Bandwidth Data Links
DDS Over Low Bandwidth Data LinksDDS Over Low Bandwidth Data Links
DDS Over Low Bandwidth Data Links
 
DDS Security
DDS SecurityDDS Security
DDS Security
 
Web application development using Play Framework (with Java)
Web application development using Play Framework (with Java)Web application development using Play Framework (with Java)
Web application development using Play Framework (with Java)
 
Comparison of MQTT and DDS as M2M Protocols for the Internet of Things
Comparison of MQTT and DDS as M2M Protocols for the Internet of ThingsComparison of MQTT and DDS as M2M Protocols for the Internet of Things
Comparison of MQTT and DDS as M2M Protocols for the Internet of Things
 
Play Framework: async I/O with Java and Scala
Play Framework: async I/O with Java and ScalaPlay Framework: async I/O with Java and Scala
Play Framework: async I/O with Java and Scala
 
Ralph Capabilities Deck RR
Ralph Capabilities Deck RRRalph Capabilities Deck RR
Ralph Capabilities Deck RR
 
Sarah Robins Powell resume/work sample
Sarah Robins Powell resume/work sampleSarah Robins Powell resume/work sample
Sarah Robins Powell resume/work sample
 
Egipto
EgiptoEgipto
Egipto
 
Sph 106 Ch 14
Sph 106 Ch 14Sph 106 Ch 14
Sph 106 Ch 14
 
Inside a Computer
Inside a ComputerInside a Computer
Inside a Computer
 
Simplethings
SimplethingsSimplethings
Simplethings
 
Carbonara coding
Carbonara codingCarbonara coding
Carbonara coding
 
Free/Open Source Software
Free/Open Source SoftwareFree/Open Source Software
Free/Open Source Software
 

Similar to DDS on the Web: Quick Recipes for Real-Time Web Applications

Tuning and Troubleshooting OpenSplice DDS Applications
Tuning and Troubleshooting OpenSplice DDS ApplicationsTuning and Troubleshooting OpenSplice DDS Applications
Tuning and Troubleshooting OpenSplice DDS ApplicationsAngelo Corsaro
 
DDS + Android = OpenSplice Mobile
DDS + Android = OpenSplice MobileDDS + Android = OpenSplice Mobile
DDS + Android = OpenSplice MobileAngelo Corsaro
 
Building and Deploying OpenSplice DDS Based Cloud Messaging
Building and Deploying OpenSplice DDS Based Cloud Messaging Building and Deploying OpenSplice DDS Based Cloud Messaging
Building and Deploying OpenSplice DDS Based Cloud Messaging Angelo Corsaro
 
WebSocket Perspectives and Vision for the Future
WebSocket Perspectives and Vision for the FutureWebSocket Perspectives and Vision for the Future
WebSocket Perspectives and Vision for the FutureFrank Greco
 
Programming WebSockets with Glassfish and Grizzly
Programming WebSockets with Glassfish and GrizzlyProgramming WebSockets with Glassfish and Grizzly
Programming WebSockets with Glassfish and GrizzlyC2B2 Consulting
 
Jwebsocketmobiletechcon2010en 100912071225 Phpapp01
Jwebsocketmobiletechcon2010en 100912071225 Phpapp01Jwebsocketmobiletechcon2010en 100912071225 Phpapp01
Jwebsocketmobiletechcon2010en 100912071225 Phpapp01purans
 
Building HTML5 WebSocket Apps in Java at JavaOne Latin America 2012
Building HTML5 WebSocket Apps in Java at JavaOne Latin America 2012Building HTML5 WebSocket Apps in Java at JavaOne Latin America 2012
Building HTML5 WebSocket Apps in Java at JavaOne Latin America 2012Arun Gupta
 
HTML5 Websockets and Java - Arun Gupta
HTML5 Websockets and Java - Arun GuptaHTML5 Websockets and Java - Arun Gupta
HTML5 Websockets and Java - Arun GuptaJAX London
 
HTML5 WebSocket Introduction
HTML5 WebSocket IntroductionHTML5 WebSocket Introduction
HTML5 WebSocket IntroductionMarcelo Jabali
 
HTML5 Real-Time and Connectivity
HTML5 Real-Time and ConnectivityHTML5 Real-Time and Connectivity
HTML5 Real-Time and ConnectivityPeter Lubbers
 
HTTP/2 and a Faster Web
HTTP/2 and a Faster WebHTTP/2 and a Faster Web
HTTP/2 and a Faster WebC4Media
 
Fog Computing with VORTEX
Fog Computing with VORTEXFog Computing with VORTEX
Fog Computing with VORTEXAngelo Corsaro
 
WebSocket Perspectives and Vision for the Future - HTML5DevConf Oct 2013 SF
WebSocket Perspectives and Vision for the Future - HTML5DevConf Oct 2013 SFWebSocket Perspectives and Vision for the Future - HTML5DevConf Oct 2013 SF
WebSocket Perspectives and Vision for the Future - HTML5DevConf Oct 2013 SFFrank Greco
 
Oracle Coherence & WebLogic 12c Web Sockets: Delivering Real Time Push at Scale
Oracle Coherence & WebLogic 12c Web Sockets: Delivering Real Time Push at ScaleOracle Coherence & WebLogic 12c Web Sockets: Delivering Real Time Push at Scale
Oracle Coherence & WebLogic 12c Web Sockets: Delivering Real Time Push at ScaleC2B2 Consulting
 
Introduction to PrismTech's Vortex Intelligent Data Sharing Platform for the ...
Introduction to PrismTech's Vortex Intelligent Data Sharing Platform for the ...Introduction to PrismTech's Vortex Intelligent Data Sharing Platform for the ...
Introduction to PrismTech's Vortex Intelligent Data Sharing Platform for the ...ADLINK Technology IoT
 
Vortex: The Intelligent Data Sharing Platform for the Internet of Things
Vortex: The Intelligent Data Sharing Platform for the Internet of ThingsVortex: The Intelligent Data Sharing Platform for the Internet of Things
Vortex: The Intelligent Data Sharing Platform for the Internet of ThingsAngelo Corsaro
 

Similar to DDS on the Web: Quick Recipes for Real-Time Web Applications (20)

Tuning and Troubleshooting OpenSplice DDS Applications
Tuning and Troubleshooting OpenSplice DDS ApplicationsTuning and Troubleshooting OpenSplice DDS Applications
Tuning and Troubleshooting OpenSplice DDS Applications
 
DDS + Android = OpenSplice Mobile
DDS + Android = OpenSplice MobileDDS + Android = OpenSplice Mobile
DDS + Android = OpenSplice Mobile
 
Building and Deploying OpenSplice DDS Based Cloud Messaging
Building and Deploying OpenSplice DDS Based Cloud Messaging Building and Deploying OpenSplice DDS Based Cloud Messaging
Building and Deploying OpenSplice DDS Based Cloud Messaging
 
WebSocket Perspectives and Vision for the Future
WebSocket Perspectives and Vision for the FutureWebSocket Perspectives and Vision for the Future
WebSocket Perspectives and Vision for the Future
 
Programming WebSockets with Glassfish and Grizzly
Programming WebSockets with Glassfish and GrizzlyProgramming WebSockets with Glassfish and Grizzly
Programming WebSockets with Glassfish and Grizzly
 
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
 
Jwebsocketmobiletechcon2010en 100912071225 Phpapp01
Jwebsocketmobiletechcon2010en 100912071225 Phpapp01Jwebsocketmobiletechcon2010en 100912071225 Phpapp01
Jwebsocketmobiletechcon2010en 100912071225 Phpapp01
 
DDS QoS Unleashed
DDS QoS UnleashedDDS QoS Unleashed
DDS QoS Unleashed
 
Building HTML5 WebSocket Apps in Java at JavaOne Latin America 2012
Building HTML5 WebSocket Apps in Java at JavaOne Latin America 2012Building HTML5 WebSocket Apps in Java at JavaOne Latin America 2012
Building HTML5 WebSocket Apps in Java at JavaOne Latin America 2012
 
Websocket 1.0
Websocket 1.0Websocket 1.0
Websocket 1.0
 
HTML5 Websockets and Java - Arun Gupta
HTML5 Websockets and Java - Arun GuptaHTML5 Websockets and Java - Arun Gupta
HTML5 Websockets and Java - Arun Gupta
 
DevCon5 (July 2014) - Acision SDK
DevCon5 (July 2014) - Acision SDKDevCon5 (July 2014) - Acision SDK
DevCon5 (July 2014) - Acision SDK
 
HTML5 WebSocket Introduction
HTML5 WebSocket IntroductionHTML5 WebSocket Introduction
HTML5 WebSocket Introduction
 
HTML5 Real-Time and Connectivity
HTML5 Real-Time and ConnectivityHTML5 Real-Time and Connectivity
HTML5 Real-Time and Connectivity
 
HTTP/2 and a Faster Web
HTTP/2 and a Faster WebHTTP/2 and a Faster Web
HTTP/2 and a Faster Web
 
Fog Computing with VORTEX
Fog Computing with VORTEXFog Computing with VORTEX
Fog Computing with VORTEX
 
WebSocket Perspectives and Vision for the Future - HTML5DevConf Oct 2013 SF
WebSocket Perspectives and Vision for the Future - HTML5DevConf Oct 2013 SFWebSocket Perspectives and Vision for the Future - HTML5DevConf Oct 2013 SF
WebSocket Perspectives and Vision for the Future - HTML5DevConf Oct 2013 SF
 
Oracle Coherence & WebLogic 12c Web Sockets: Delivering Real Time Push at Scale
Oracle Coherence & WebLogic 12c Web Sockets: Delivering Real Time Push at ScaleOracle Coherence & WebLogic 12c Web Sockets: Delivering Real Time Push at Scale
Oracle Coherence & WebLogic 12c Web Sockets: Delivering Real Time Push at Scale
 
Introduction to PrismTech's Vortex Intelligent Data Sharing Platform for the ...
Introduction to PrismTech's Vortex Intelligent Data Sharing Platform for the ...Introduction to PrismTech's Vortex Intelligent Data Sharing Platform for the ...
Introduction to PrismTech's Vortex Intelligent Data Sharing Platform for the ...
 
Vortex: The Intelligent Data Sharing Platform for the Internet of Things
Vortex: The Intelligent Data Sharing Platform for the Internet of ThingsVortex: The Intelligent Data Sharing Platform for the Internet of Things
Vortex: The Intelligent Data Sharing Platform for the Internet of Things
 

More from Angelo Corsaro

zenoh: The Edge Data Fabric
zenoh: The Edge Data Fabriczenoh: The Edge Data Fabric
zenoh: The Edge Data FabricAngelo Corsaro
 
Data Decentralisation: Efficiency, Privacy and Fair Monetisation
Data Decentralisation: Efficiency, Privacy and Fair MonetisationData Decentralisation: Efficiency, Privacy and Fair Monetisation
Data Decentralisation: Efficiency, Privacy and Fair MonetisationAngelo Corsaro
 
zenoh: zero overhead pub/sub store/query compute
zenoh: zero overhead pub/sub store/query computezenoh: zero overhead pub/sub store/query compute
zenoh: zero overhead pub/sub store/query computeAngelo Corsaro
 
zenoh -- the ZEro Network OverHead protocol
zenoh -- the ZEro Network OverHead protocolzenoh -- the ZEro Network OverHead protocol
zenoh -- the ZEro Network OverHead protocolAngelo Corsaro
 
zenoh -- the ZEro Network OverHead protocol
zenoh -- the ZEro Network OverHead protocolzenoh -- the ZEro Network OverHead protocol
zenoh -- the ZEro Network OverHead protocolAngelo Corsaro
 
Breaking the Edge -- A Journey Through Cloud, Edge and Fog Computing
Breaking the Edge -- A Journey Through Cloud, Edge and Fog ComputingBreaking the Edge -- A Journey Through Cloud, Edge and Fog Computing
Breaking the Edge -- A Journey Through Cloud, Edge and Fog ComputingAngelo Corsaro
 
fog05: The Fog Computing Infrastructure
fog05: The Fog Computing Infrastructurefog05: The Fog Computing Infrastructure
fog05: The Fog Computing InfrastructureAngelo Corsaro
 
Cyclone DDS: Sharing Data in the IoT Age
Cyclone DDS: Sharing Data in the IoT AgeCyclone DDS: Sharing Data in the IoT Age
Cyclone DDS: Sharing Data in the IoT AgeAngelo Corsaro
 
fog05: The Fog Computing Platform
fog05: The Fog Computing Platformfog05: The Fog Computing Platform
fog05: The Fog Computing PlatformAngelo Corsaro
 
Programming in Scala - Lecture Four
Programming in Scala - Lecture FourProgramming in Scala - Lecture Four
Programming in Scala - Lecture FourAngelo Corsaro
 
Programming in Scala - Lecture Three
Programming in Scala - Lecture ThreeProgramming in Scala - Lecture Three
Programming in Scala - Lecture ThreeAngelo Corsaro
 
Programming in Scala - Lecture Two
Programming in Scala - Lecture TwoProgramming in Scala - Lecture Two
Programming in Scala - Lecture TwoAngelo Corsaro
 
Programming in Scala - Lecture One
Programming in Scala - Lecture OneProgramming in Scala - Lecture One
Programming in Scala - Lecture OneAngelo Corsaro
 
Data Sharing in Extremely Resource Constrained Envionrments
Data Sharing in Extremely Resource Constrained EnvionrmentsData Sharing in Extremely Resource Constrained Envionrments
Data Sharing in Extremely Resource Constrained EnvionrmentsAngelo Corsaro
 
The Data Distribution Service
The Data Distribution ServiceThe Data Distribution Service
The Data Distribution ServiceAngelo Corsaro
 
RUSTing -- Partially Ordered Rust Programming Ruminations
RUSTing -- Partially Ordered Rust Programming RuminationsRUSTing -- Partially Ordered Rust Programming Ruminations
RUSTing -- Partially Ordered Rust Programming RuminationsAngelo Corsaro
 
Vortex II -- The Industrial IoT Connectivity Standard
Vortex II -- The  Industrial IoT  Connectivity StandardVortex II -- The  Industrial IoT  Connectivity Standard
Vortex II -- The Industrial IoT Connectivity StandardAngelo Corsaro
 

More from Angelo Corsaro (20)

Zenoh: The Genesis
Zenoh: The GenesisZenoh: The Genesis
Zenoh: The Genesis
 
zenoh: The Edge Data Fabric
zenoh: The Edge Data Fabriczenoh: The Edge Data Fabric
zenoh: The Edge Data Fabric
 
Zenoh Tutorial
Zenoh TutorialZenoh Tutorial
Zenoh Tutorial
 
Data Decentralisation: Efficiency, Privacy and Fair Monetisation
Data Decentralisation: Efficiency, Privacy and Fair MonetisationData Decentralisation: Efficiency, Privacy and Fair Monetisation
Data Decentralisation: Efficiency, Privacy and Fair Monetisation
 
zenoh: zero overhead pub/sub store/query compute
zenoh: zero overhead pub/sub store/query computezenoh: zero overhead pub/sub store/query compute
zenoh: zero overhead pub/sub store/query compute
 
zenoh -- the ZEro Network OverHead protocol
zenoh -- the ZEro Network OverHead protocolzenoh -- the ZEro Network OverHead protocol
zenoh -- the ZEro Network OverHead protocol
 
zenoh -- the ZEro Network OverHead protocol
zenoh -- the ZEro Network OverHead protocolzenoh -- the ZEro Network OverHead protocol
zenoh -- the ZEro Network OverHead protocol
 
Breaking the Edge -- A Journey Through Cloud, Edge and Fog Computing
Breaking the Edge -- A Journey Through Cloud, Edge and Fog ComputingBreaking the Edge -- A Journey Through Cloud, Edge and Fog Computing
Breaking the Edge -- A Journey Through Cloud, Edge and Fog Computing
 
Eastern Sicily
Eastern SicilyEastern Sicily
Eastern Sicily
 
fog05: The Fog Computing Infrastructure
fog05: The Fog Computing Infrastructurefog05: The Fog Computing Infrastructure
fog05: The Fog Computing Infrastructure
 
Cyclone DDS: Sharing Data in the IoT Age
Cyclone DDS: Sharing Data in the IoT AgeCyclone DDS: Sharing Data in the IoT Age
Cyclone DDS: Sharing Data in the IoT Age
 
fog05: The Fog Computing Platform
fog05: The Fog Computing Platformfog05: The Fog Computing Platform
fog05: The Fog Computing Platform
 
Programming in Scala - Lecture Four
Programming in Scala - Lecture FourProgramming in Scala - Lecture Four
Programming in Scala - Lecture Four
 
Programming in Scala - Lecture Three
Programming in Scala - Lecture ThreeProgramming in Scala - Lecture Three
Programming in Scala - Lecture Three
 
Programming in Scala - Lecture Two
Programming in Scala - Lecture TwoProgramming in Scala - Lecture Two
Programming in Scala - Lecture Two
 
Programming in Scala - Lecture One
Programming in Scala - Lecture OneProgramming in Scala - Lecture One
Programming in Scala - Lecture One
 
Data Sharing in Extremely Resource Constrained Envionrments
Data Sharing in Extremely Resource Constrained EnvionrmentsData Sharing in Extremely Resource Constrained Envionrments
Data Sharing in Extremely Resource Constrained Envionrments
 
The Data Distribution Service
The Data Distribution ServiceThe Data Distribution Service
The Data Distribution Service
 
RUSTing -- Partially Ordered Rust Programming Ruminations
RUSTing -- Partially Ordered Rust Programming RuminationsRUSTing -- Partially Ordered Rust Programming Ruminations
RUSTing -- Partially Ordered Rust Programming Ruminations
 
Vortex II -- The Industrial IoT Connectivity Standard
Vortex II -- The  Industrial IoT  Connectivity StandardVortex II -- The  Industrial IoT  Connectivity Standard
Vortex II -- The Industrial IoT Connectivity Standard
 

Recently uploaded

New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostZilliz
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr LapshynFwdays
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clashcharlottematthew16
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024The Digital Insurer
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 

Recently uploaded (20)

New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clash
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 

DDS on the Web: Quick Recipes for Real-Time Web Applications

  • 1. DDS on the Web Quick Recipes for Real-Time Web Applications OpenSplice DDS Angelo CORSARO, Ph.D. Chief Technology Officer OMG DDS Sig Co-Chair PrismTech angelo.corsaro@prismtech.com
  • 2. The Rise of the Real-Time Web ☐ It can be argued that Browsers are becoming today the Virtual Machine of the Web -- as opposed to simply a rendering engine Copyright  2011,  PrismTech  –    All  Rights  Reserved. ☐ The introduction of HTML5 and related standards, such as WebSockets, has furthered this trend providing an increasingly compelling platform for the development of device/browser OpenSplice DDS independent applications ☐ In addition, new standards like WebSockets are making it possible for web application to send and receive data by completely bypassing HTTP ☐ These innovations, are making it possible to have highly-interactive real-time web applications that can push data very efficiently
  • 3. DDS and Real-Time Web App DDS is used today to in a large class of mission and business critical Copyright  2011,  PrismTech  –    All  Rights  Reserved. ☐ applications, such as Air Traffic Control and Management, SCADA, Smart Grid, Smart Cities, Trading, etc., to share data in real-time Many of the systems using DDS today increasingly need to expose OpenSplice DDS ☐ application to mobile devices, thus entering on the Native-App vs. Web-App dilemma ☐ The introduction of HTML5 and WebSockets makes it possible today to push real-time DDS traffic to a WebBrowser and vice-versa
  • 5. Exposing DDS Data to Web Apps Copyright  2011,  PrismTech  –    All  Rights  Reserved. ☐ Several different approaches exist to expose DDS data to Web Apps ☐ WebSocket are the most natural approach, especially for applications requiring relatively low latency OpenSplice DDS ☐ Polling or HTTP Streaming frameworks, such as CometD, can also be used, but are less efficient both in terms of throughput as well as in terms of latency ☐ Here we focus on WebSockets
  • 6. From DDS to WebSockets There are several approaches that can be taken to provide DDS traffic over Copyright  2011,  PrismTech  –    All  Rights  Reserved. Web Sockets: ☐ The OpenSplice Gateway provides probably the most natural way of integrating DDS with WebSockets is through route definitions OpenSplice DDS ☐ The Play! Framework is probably the best choice for those that along using WebSockets and DDS want to use DDS as a back-end technology (e.g. for scale-out, caching, etc.) ☐ Netty is yet another possibility, but the one that requires you to do the most work in term of integrating DDS with WebSockets. At the same time gives you complete control
  • 7. OpenSplice DDS WebSockets
  • 8. HTML5 WebSockets Copyright  2011,  PrismTech  –    All  Rights  Reserved. ☐ The WebSockets specification defines an API that enables web pages to use the WebSockets protocol for two-way communication with a remote host OpenSplice DDS ☐ WebSockets greatly reduce network traffic and latency compared to HTTP polling and long-polling techniques commonly used to simulate a full-duplex connection by maintaining two connections ☐ WebSockets are capable of traversing firewalls and proxies
  • 9. WebSocket Protocol ☐ The WebSocket protocol is designed to work well with the existing Web Copyright  2011,  PrismTech  –    All  Rights  Reserved. infrastructure ☐ The WebSocket connection starts as an HTTP connection which then is upgraded by replacing the HTTP connection with the WebSocket OpenSplice DDS connection over the same underlying TCP/IP connection ☐ Once connected, WebSocket data frames can be sent back and forth between the client and the server in full-duplex mode ☐ Text and Binary frames are supported. The data is framed with just two bytes
  • 10. WebSocket API [Constructor(in DOMString url, optional in DOMString protocol)] interface WebSocket { readonly attribute DOMString URL; // ready state Copyright  2011,  PrismTech  –    All  Rights  Reserved. const unsigned short CONNECTING = 0; const unsigned short OPEN = 1; const unsigned short CLOSED = 2; readonly attribute unsigned short readyState; readonly attribute unsigned long bufferedAmount; OpenSplice DDS // networking attribute Function onopen; attribute Function onmessage; attribute Function onclose; boolean send(in DOMString data); void close(); }; WebSocket implements EventTarget;
  • 11. DDS/WebSockets OpenSplice Gateway OpenSplice DDS
  • 12. OpenSplice Gateway ☐ Provides DDS applications with unprecedented JMS Copyright  2011,  PrismTech  –    All  Rights  Reserved. integration capabilities by supporting high performance format and content XM ST PP RE transformation, routing and QoS mediation OpenSplice Gateway Leverages Apache Camel integration P Cu ☐ AMQ sto framework and its support for over 80 OpenSplice DDS m connectors DDSI-RTPS ☐ OpenSplice Gateway is the best choice for integrating DDS-interoperable applications with proprietary as well as standard-based Supported Connectors Include: messaging technologies, such as JMS and - JMS - HTTP AMQP, as well as user applications leveraging - REST - AMQP - CometD - XMPP Web standards such as  W3C Web Services, - CFX - Hibernate REST and HTML5 WebSockets - TCP & UDP Sockets - Custom
  • 13. Architecture OpenSplice Gateway Based on camel-ospl Copyright  2011,  PrismTech  –    All  Rights  Reserved. • DataReader & Component DataWriter • Typed data OpenSplice DDS • No native or camel-ddsi generated code Component • No marshalling OpenSplice DDS (raw data buffer) JDDSI Camel DDS Processors • DDSI demarshaller / marshaller • Data transformation • Dynamic Poll Enricher • QoS adaptations
  • 14. WebSocket Integration 1 // Define endpoints 2 val inEndpoint = Copyright  2011,  PrismTech  –    All  Rights  Reserved. 3 "ddsi:"+ inTopic +":"+ inDomain +"/" + shapeType 4 val outEndpoint = 5 "websocket://"+inTopic.toLowerCase + "?sendToAll=true" 6 7 // Define a Route using the Scala DSL 8 val shapesRoute = new RouteBuilder { 9 override def configure() = To JSON OpenSplice DDS 10 from(inEndpoint) unmarshal("cdr") marshal() json() to(outEndpoint) 11 } Topic “Circle” ☐ This example requires Camel 2.10 DDS Domain 0
  • 15. WebSocket Integration 1 // Define endpoints 2 val inEndpoint = Copyright  2011,  PrismTech  –    All  Rights  Reserved. 3 "websocket://"+inTopic.toLowerCase 4 val outEndpoint = 5 "ddsi:"+ inTopic +":"+ inDomain +"/" + shapeType 6 7 // Define a Route using the Scala DSL 8 val shapesRoute = new RouteBuilder { 9 override def configure() = To POJO OpenSplice DDS 10 from(inEndpoint) unmarshal() json() to(outEndpoint) 11 } Topic “Circle” ☐ This example requires Camel 2.10 DDS Domain 0
  • 16. OpenSplice DDS - Live Demo -
  • 17. DDS/WebSockets Play! Framework OpenSplice DDS
  • 18. The Play! Framework ☐ Play! is a Web Application Framework based on a lightweight, stateless, web- Copyright  2011,  PrismTech  –    All  Rights  Reserved. friendly architecture ☐ Play! features predictable and minimal resource consumption (CPU, memory, OpenSplice DDS threads) for highly-scalable applications thanks to its reactive model, based on Iteratee IO ☐ The Play! Framework: ☐ Supports asynchronous programming ☐ Focuses on Type Safety ☐ Native support for Java and Scala ☐ Support for HTML5 and WebSocket
  • 19. Play! and MVC Pattern Copyright  2011,  PrismTech  –    All  Rights  Reserved. ☐ Play! is based on the Model View Controller Pattern so to cleanly separate the presentation, control and business logic OpenSplice DDS ☐ Play! uses routes to map incoming HTTP requests to actions. Actions are implemented as Java or Scala methods
  • 20. Anatomy of a Play! Application Copyright  2011,  PrismTech  –    All  Rights  Reserved. ☐ The organization of a Play! applications OpenSplice DDS makes apparent its MVC approach
  • 21. WebSockets in Play! Using WebSockets with Play! is very straight-forward as all it Copyright  2011,  PrismTech  –    All  Rights  Reserved. requires is to: ☐ Route incoming HTTP GET request to the controller that will establish a WebSocket Connection OpenSplice DDS # Home page GET / controllers.Application.index GET /ishapes controllers.Application.ishapes ☐ Use the Play! Iteratee API for asynchronously deal with incoming messages def ishapes = WebSocket.using[String] { request => ... }
  • 22. Play!ng with iShapes OpenSplice DDS - Live Demo -
  • 24. OpenSplice DDS ☐ ☐ ☐ Dart JavaScript CoffeeScript Client Side Technologies Copyright  2011,  PrismTech  –    All  Rights  Reserved.
  • 25. JavaScript Copyright  2011,  PrismTech  –    All  Rights  Reserved. ☐ JavaScript is the most widely used client technology for web- applications ☐ The plus of JavaScript are the many powerful frameworks that exist, OpenSplice DDS such as DOJO, JQuery, etc/ ☐ The minus is the programming language itself, which is verbose and lacking few constructs for facilitating large scale software development
  • 26. Coffescript Copyright  2011,  PrismTech  –    All  Rights  Reserved. ☐ CoffeeScript is a is a relatively little language that improves JavaScript usability and introduces some functional programming mechanism, e.g. lambdas and comprehension, in a concise and elegant manners OpenSplice DDS ☐ CoffeeScript compiles to JavaScript and the compiled JavaScript is readable and pretty-printed, passes through JavaScript Lint without warnings, will work in every JavaScript runtime, and tends to run as fast or faster than the equivalent handwritten JavaScript. http://coffeescript.org/
  • 27. CoffeScript Overview CoffeScript JavaScript Copyright  2011,  PrismTech  –    All  Rights  Reserved. square = (x) -> x * x square = function(x) { # Functions return x * x; }; OpenSplice DDS math = math = { # Objects root: Math.sqrt root: Math.sqrt, square: square square: square, cube: (x) -> x * square x cube: function(x) { return x * square(x); } };
  • 28. CoffeScript Overview CoffeScript JavaScript Copyright  2011,  PrismTech  –    All  Rights  Reserved. cubes = (function() { # Array cubes = var _i, _len, _results; Comprehension (math.cube num for num in list) _results = []; for (_i = 0, _len = list.length; OpenSplice DDS _i < _len; _i++) { num = list[_i]; _results.push(math.cube(num)); } return _results; })();
  • 29. Dart Dart is a new class-based programming language for creating Copyright  2011,  PrismTech  –    All  Rights  Reserved. ☐ structured web applications ☐ The main goal of Dart is that of making it simple and more productive to write large-scale web applications OpenSplice DDS ☐ Dart code can be run natively on some browsers (like Chromium), it can be compiled to JavaScript, or it can be run standalone on the DartVM http://www.dartlang.org/
  • 30. Dart Overview: Type System class Point { var x, y; Copyright  2011,  PrismTech  –    All  Rights  Reserved. Point(this.x, this.y); scale(factor) => new Point(x*factor, y*factor); Optional Types distance() => Math.sqrt(x*x + y*y); } ☐ Dart allows a mixture of static main() { var a = new Point(2,3).scale(10); and dynamic type checking print(a.distance()); OpenSplice DDS } ☐ It is possible to only use static class Point { num x, y; typing, dynamic typing or Point(num this.x, num this.y); Point scale(num factor) => mixing the two new Point(x*factor, y*factor); num distance() => Math.sqrt(x*x + y*y); } void main() { Point a = new Point(2,3).scale(10); print(a.distance()); }
  • 31. Dart Overview: Type System Generics Copyright  2011,  PrismTech  –    All  Rights  Reserved. ☐ Dart provides support for Generic Types ☐ However, as Dart has optional var names = new List<int>(); types, it is not mandatory to names.addAll([1, 2, 3, 4, 5]); OpenSplice DDS names.add(“foo”); // Fails in checked mode use generic type annotations // (succeeds in production // mode). ☐ At the same time taking advantage of the Generic support is useful to produce code whose intent is clearer and whose types error can be easily checked with tools
  • 32. Dart Overview: OOP ☐ Interfaces and Classes Copyright  2011,  PrismTech  –    All  Rights  Reserved. provide a set of reusable interface Shape { and extensible building } num perimeter(); blocks. class Rectangle implements Shape { OpenSplice DDS final num height, width; ☐ An interface defines a set of Rectangle(num this.height, num this.width); num perimeter() => 2*height + 2*width; methods and constants } class Square extends Rectangle { ☐ A class can implement } Square(num size) : super(size, size); multiple interfaces, but it only inherits from a single superclass
  • 33. Dart Overview: FP Copyright  2011,  PrismTech  –    All  Rights  Reserved. List<int> l = [1,2,3,4,5]; ☐ Dart provides some functional l.forEach((i) => print(i)); OpenSplice DDS programming mechanisms such var l2 = l.map((i) => i*i); as lamdas and list comprehension l2.forEach(print);
  • 34. Dart & DDS in Action OpenSplice DDS - Live Demo -
  • 35. OpenSplice DDS Summing Up
  • 36. Concluding Remarks ☐ Web Technologies are becoming more and more relevant for any kind of system Copyright  2011,  PrismTech  –    All  Rights  Reserved. ☐ Latest innovation on Web Technologies have made it possible to have real-time web applications OpenSplice DDS ☐ Existing DDS applications can easily expose their data to Real-Time Web Applications taking advantage of several powerful technologies such as the OpenSplice Gateway and the Play! Framework ☐ Lots of innovation in Client Technologies to make it easier to develop web-applications that look, feel and perform as native applications
  • 37. References Copyright  2011,  PrismTech  –    All  Rights  Reserved. OpenSplice | DDS Escalier ¥ #1 OMG DDS Implementation ¥ Fastest growing JVM Language ¥ Scala API for OpenSplice DDS ¥ Open Source ¥ Open Source ¥ Open Source ¥ www.opensplice.org ¥ www.scala-lang.org ¥ github.com/kydos/escalier OpenSplice DDS ¥ Simple C++ API for DDS ¥ DDS-PSM-Java for OpenSplice DDS ¥ DDS-based Advanced Distributed ¥ Open Source ¥ Open Source Algorithms Toolkit ¥ github.com/kydos/simd-cxx ¥ github.com/kydos/simd-java ¥ Open Source ¥ github.com/kydos/dada
  • 38. :: Connect with Us :: ¥opensplice.com ¥forums.opensplice.org ¥@acorsaro ¥opensplice.org ¥opensplicedds@prismtech.com ¥@prismtech OpenSplice DDS ¥ crc@prismtech.com ¥sales@prismtech.com ¥youtube.com/opensplicetube ¥slideshare.net/angelo.corsaro