department of computer and information sciences indiana ...€¦ · the data distribution services...
TRANSCRIPT
![Page 1: Department of Computer and Information Sciences Indiana ...€¦ · The Data Distribution Services (DDS) is an OMG specification for creating real - time publisher-subscriber applications](https://reader034.vdocuments.net/reader034/viewer/2022042922/5f7d349977c70345e00d43b0/html5/thumbnails/1.jpg)
James H. Hill [email protected] Department of Computer and Information Sciences Indiana University-Purdue University Indianapolis Indianapolis, IN USA
![Page 2: Department of Computer and Information Sciences Indiana ...€¦ · The Data Distribution Services (DDS) is an OMG specification for creating real - time publisher-subscriber applications](https://reader034.vdocuments.net/reader034/viewer/2022042922/5f7d349977c70345e00d43b0/html5/thumbnails/2.jpg)
2
The Data Distribution Services (DDS) is an OMG specification for creating real-time publisher-subscriber applications
Provides mechanisms for associating quality-of-service (QoS) properties with key entities involved in a publisher-subscriber application
QoS configurations can ensure certain levels of performance guarantees
![Page 3: Department of Computer and Information Sciences Indiana ...€¦ · The Data Distribution Services (DDS) is an OMG specification for creating real - time publisher-subscriber applications](https://reader034.vdocuments.net/reader034/viewer/2022042922/5f7d349977c70345e00d43b0/html5/thumbnails/3.jpg)
3
Client is responsible for managing many DDS entities
e.g., Publisher, DataReader, DataWriter, & etc.
No clear separation of concerns
e.g., deployment vs. configuration vs. runtime
Client must interact with many low-level constructs
![Page 4: Department of Computer and Information Sciences Indiana ...€¦ · The Data Distribution Services (DDS) is an OMG specification for creating real - time publisher-subscriber applications](https://reader034.vdocuments.net/reader034/viewer/2022042922/5f7d349977c70345e00d43b0/html5/thumbnails/4.jpg)
4
Key entities in a CORBA Component Model (CCM) component:
Component Servant – Responsible for hosting a component implementation
Context – Allows a component to send events to other components
Component Implementation – The component implementation is the core “business-logic” of the component
Fig. Simplified diagram of a component in the CORBA Component Model (CCM).
![Page 5: Department of Computer and Information Sciences Indiana ...€¦ · The Data Distribution Services (DDS) is an OMG specification for creating real - time publisher-subscriber applications](https://reader034.vdocuments.net/reader034/viewer/2022042922/5f7d349977c70345e00d43b0/html5/thumbnails/5.jpg)
5
Three approaches for integrating DDS into the CORBA Component Model (CCM):
1. Direct Integration – DDS integrated at the component implementation level
2. Servant-based Integration – DDS integrated at the servant/context level
3. Connector/Gateway Integration – External mediator responsible for transforming “CORBA” event to DDS event
Fig. Points for integrating DDS into a CCM component.
![Page 6: Department of Computer and Information Sciences Indiana ...€¦ · The Data Distribution Services (DDS) is an OMG specification for creating real - time publisher-subscriber applications](https://reader034.vdocuments.net/reader034/viewer/2022042922/5f7d349977c70345e00d43b0/html5/thumbnails/6.jpg)
6
DDS4CCM…
is an OMG specification for integrating DDS into CCM
uses connector-based approach for integrating DDS into CCM
Design Evaluation
Uses DDS event types (i.e., structs) instead of CORBA event types
Hard to swap different component implementations
Requires modification to IDL3 grammar (e.g., template modules, port types, etc.)
In the end, DDS4CCM does not abstract the communication model to work with CCM. Instead,
DDS4CCM modified CCM to work with DDS.
![Page 7: Department of Computer and Information Sciences Indiana ...€¦ · The Data Distribution Services (DDS) is an OMG specification for creating real - time publisher-subscriber applications](https://reader034.vdocuments.net/reader034/viewer/2022042922/5f7d349977c70345e00d43b0/html5/thumbnails/7.jpg)
7
Integrated CCM (iCCM)…
is a framework & architecture for integrating different middleware technologies into CCM
uses servant-based approach for realizing integration
iCCM Design Goals
Transparent interchanging of different architectures
e.g., OpenSplice, RTI-DDS, OpenDDS, etc.
Map existing IDL3 constructs to target architecture entities
Configuration at deployment time
![Page 8: Department of Computer and Information Sciences Indiana ...€¦ · The Data Distribution Services (DDS) is an OMG specification for creating real - time publisher-subscriber applications](https://reader034.vdocuments.net/reader034/viewer/2022042922/5f7d349977c70345e00d43b0/html5/thumbnails/8.jpg)
8
Context has a collection of publisher & emits entities for sending events to other components
The servant has a collection of event consumer entities for receiving events from other components
Need to map the publisher, emits, & event consumer entities to its corresponding entity in the DDS, or visa versa
![Page 9: Department of Computer and Information Sciences Indiana ...€¦ · The Data Distribution Services (DDS) is an OMG specification for creating real - time publisher-subscriber applications](https://reader034.vdocuments.net/reader034/viewer/2022042922/5f7d349977c70345e00d43b0/html5/thumbnails/9.jpg)
9
DomainParticipant – Mapped to a component in CCM
DataReader – Mapped to an event consumer in CCM
DataWriter – Mapped to an emits or publishers port in CCM
Publisher – Configuration entity for grouping emits/publishes ports with same QoS properties
Subscriber – Configuration entity for grouping EventConusmers with same QoS properties
Domain Participant
Data Reader Data Writer
Subscriber configuring EventConsumer ports
Publisher configuring emits/publishes ports
![Page 10: Department of Computer and Information Sciences Indiana ...€¦ · The Data Distribution Services (DDS) is an OMG specification for creating real - time publisher-subscriber applications](https://reader034.vdocuments.net/reader034/viewer/2022042922/5f7d349977c70345e00d43b0/html5/thumbnails/10.jpg)
10
module Components { /** * Base class for all component event consumer. */ interface ::Components::EventConsumerBase { // Method for sending an event. void push_event (in EventBase evt) raises (BadEventType); }; };
Provided by input port to determine what output ports of a component communicates with it using a CORBA event
EventConsumer entities are the abstractions that represent the connection
e.g., sender component uses connected event consumer to send an event
Setup by deployment & configuration tools
How can we leverage the EventConsumer when integrating DDS into iCCM?
![Page 11: Department of Computer and Information Sciences Indiana ...€¦ · The Data Distribution Services (DDS) is an OMG specification for creating real - time publisher-subscriber applications](https://reader034.vdocuments.net/reader034/viewer/2022042922/5f7d349977c70345e00d43b0/html5/thumbnails/11.jpg)
11
module DDS { /** * Extension interface for connecting to subscriber using CCM * component connections. The event consumer exposes methods that * control what topics it listens to. */ interface EventConsumer : ::Components::EventConsumerBase { void add_topic (in string topic_name); void remove_topic (in string topic_name); }; };
Publishes/emits port connect to an event consumer & determine topic name
local – component instance name + port name
global – port name
custom topic – user-defined name at deployment time
add_topic & remove_topic manage the lifecycle of DDS event listeners for the corresponding topic
![Page 12: Department of Computer and Information Sciences Indiana ...€¦ · The Data Distribution Services (DDS) is an OMG specification for creating real - time publisher-subscriber applications](https://reader034.vdocuments.net/reader034/viewer/2022042922/5f7d349977c70345e00d43b0/html5/thumbnails/12.jpg)
12
Topic: Foo
Topic: Bar
Type: Message
Component implementation can receive events on same port for different DDS topics
![Page 13: Department of Computer and Information Sciences Indiana ...€¦ · The Data Distribution Services (DDS) is an OMG specification for creating real - time publisher-subscriber applications](https://reader034.vdocuments.net/reader034/viewer/2022042922/5f7d349977c70345e00d43b0/html5/thumbnails/13.jpg)
13
// DDS event struct ShapeType { string color; //@key long x; long y; long shapesize; };
DDS events are structs in IDL & CCM events are eventtypes (i.e., object-by-value types)
// CCM event eventtype ShapeEvent { public string color; public long x; public long y; public long shapesize; };
![Page 14: Department of Computer and Information Sciences Indiana ...€¦ · The Data Distribution Services (DDS) is an OMG specification for creating real - time publisher-subscriber applications](https://reader034.vdocuments.net/reader034/viewer/2022042922/5f7d349977c70345e00d43b0/html5/thumbnails/14.jpg)
14
// DDS event struct ShapeType { string color; //@key long x; long y; long shapesize; };
DDS events are structs in IDL & CCM events are eventtypes (i.e., object-by-value types)
Solution: iCCM uses preprocessor statements to map DDS events to CCM events
i.e., #pragma dds2ccm
// CCM event eventtype ShapeEvent { public string color; public long x; public long y; public long shapesize; }; // DDS to CCM event mapping #pragma dds2ccm (ShapeType, ShapeEvent)
![Page 15: Department of Computer and Information Sciences Indiana ...€¦ · The Data Distribution Services (DDS) is an OMG specification for creating real - time publisher-subscriber applications](https://reader034.vdocuments.net/reader034/viewer/2022042922/5f7d349977c70345e00d43b0/html5/thumbnails/15.jpg)
15
DDS events are structs in IDL & CCM events are eventtypes (i.e., object-by-value types)
Solution: iCCM uses preprocessor statements to map DDS events to CCM events
i.e., #pragma dds2ccm
iCCM compiler generates stub files that implement CCM events for the DDS event
IDL
iCCM compiler
CORBA compiler
iCCM stub
stub Stub files are compiled with component skeleton
and servant files.
![Page 16: Department of Computer and Information Sciences Indiana ...€¦ · The Data Distribution Services (DDS) is an OMG specification for creating real - time publisher-subscriber applications](https://reader034.vdocuments.net/reader034/viewer/2022042922/5f7d349977c70345e00d43b0/html5/thumbnails/16.jpg)
16
// Upcall dds2ccm event class ShapeEventUpcall : public virtual ShapeEvent, public virtual ::CORBA::DefaultValueRefCountBase { public: ShapeEventUpcall (ShapeEvent & dds_event); virtual ~ShapeEventUpcall (void); CORBA::Long x (void) { return this->dds_event_.x; } void x (CORBA::Long val) { this->dds_event_.x = val; } // other methods private: // Reference to read DDS event ShapeEvent & dds_event_; };
Upcall event, which is an event forwarded from a servant to the implementation, is a lightweight wrapper around an existing DDS event
![Page 17: Department of Computer and Information Sciences Indiana ...€¦ · The Data Distribution Services (DDS) is an OMG specification for creating real - time publisher-subscriber applications](https://reader034.vdocuments.net/reader034/viewer/2022042922/5f7d349977c70345e00d43b0/html5/thumbnails/17.jpg)
17
// Upcall dds2ccm event class ShapeEventUpcall : public virtual ShapeEvent, public virtual ::CORBA::DefaultValueRefCountBase { public: ShapeEventUpcall (ShapeEvent & dds_event); virtual ~ShapeEventUpcall (void); CORBA::Long x (void) { return this->dds_event_.x; } void x (CORBA::Long val) { this->dds_event_.x = val; } // other methods private: // Reference to read DDS event ShapeEvent & dds_event_; };
Upcall event, which is an event forwarded from a servant to the implementation, is a lightweight wrapper around an existing DDS event
Extends ShapeEvent interface & provides DDS-specific implementation
![Page 18: Department of Computer and Information Sciences Indiana ...€¦ · The Data Distribution Services (DDS) is an OMG specification for creating real - time publisher-subscriber applications](https://reader034.vdocuments.net/reader034/viewer/2022042922/5f7d349977c70345e00d43b0/html5/thumbnails/18.jpg)
18
// Downcall dds2ccm event class ShapeEventDowncall : public virtual ShapeEvent, public virtual ::CORBA::DefaultValueRefCountBase { public: ShapeEventDowncall (void); virtual ~ShapeEventDowncall (void); CORBA::Long x (void) { return this->dds_event_.x; } void x (CORBA::Long val) { this->dds_event_.x = val; } // other methods private: // Instance of a DDS event ShapeEvent dds_event_; };
Downcall event, which is an event forwarded from the implementation to the servant, is a lightweight wrapper around a new DDS event
![Page 19: Department of Computer and Information Sciences Indiana ...€¦ · The Data Distribution Services (DDS) is an OMG specification for creating real - time publisher-subscriber applications](https://reader034.vdocuments.net/reader034/viewer/2022042922/5f7d349977c70345e00d43b0/html5/thumbnails/19.jpg)
19
// Downcall dds2ccm event class ShapeEventDowncall : public virtual ShapeEvent, public virtual ::CORBA::DefaultValueRefCountBase { public: ShapeEventDowncall (void); virtual ~ShapeEventDowncall (void); CORBA::Long x (void) { return this->dds_event_.x; } void x (CORBA::Long val) { this->dds_event_.x = val; } // other methods private: // Instance of a DDS event ShapeEvent dds_event_; };
Downcall event, which is an event forwarded from the implementation to the servant, is a lightweight wrapper around a new DDS event
Extends ShapeEvent interface & provides DDS-specific implementation
![Page 20: Department of Computer and Information Sciences Indiana ...€¦ · The Data Distribution Services (DDS) is an OMG specification for creating real - time publisher-subscriber applications](https://reader034.vdocuments.net/reader034/viewer/2022042922/5f7d349977c70345e00d43b0/html5/thumbnails/20.jpg)
20
void ShapeSender::ccm_activate (void) { // create new shape event ShapeEvent_var e (new ShapEvent()); // set event attributes // send the event ctx->push_ColorChange (e.in ()); }
Component implementations traditionally control the creation of a CCM event to be published to another component
Current CCM implementations make it hard to switch between communication architectures
e.g., OpenSplice, RTI-DDS, OpenDDS, etc.
![Page 21: Department of Computer and Information Sciences Indiana ...€¦ · The Data Distribution Services (DDS) is an OMG specification for creating real - time publisher-subscriber applications](https://reader034.vdocuments.net/reader034/viewer/2022042922/5f7d349977c70345e00d43b0/html5/thumbnails/21.jpg)
21
component ShapesComponent { publishes ShapeEvent ColorChange; };
Component implementations traditionally control the creation of a CCM event to be published to another component
Current CCM implementations make it hard to switch between communication architectures
e.g., OpenSplice, RTI-DDS, OpenDDS
Solution: iCCM context controls event creation for each publishes & emits port
local interface iCCM_ShapesComponent_Context : CCM_ShapesComponent_Context { ShapeEvent new_ColorChange_event(); };
void ShapeSender::ccm_activate (void) { // create new shape event ShapeEvent_var e ( ctx->new_ColorChange_event ()); // update event attributes ctx->push_ColorChange (e.in ()); }
![Page 22: Department of Computer and Information Sciences Indiana ...€¦ · The Data Distribution Services (DDS) is an OMG specification for creating real - time publisher-subscriber applications](https://reader034.vdocuments.net/reader034/viewer/2022042922/5f7d349977c70345e00d43b0/html5/thumbnails/22.jpg)
22
component ShapesComponent { publishes ShapeEvent ColorChange; };
Component implementations traditionally control the creation of a CCM event to be published to another component
Current CCM implementations make it hard to switch between communication architectures
e.g., OpenSplice, RTI-DDS, OpenDDS
Solution: iCCM context controls event creation for each publishes & emits port
local interface iCCM_ShapesComponent_Context : CCM_ShapesComponent_Context { ShapeEvent new_ColorChange_event(); };
void ShapeSender::ccm_activate (void) { // create new shape event ShapeEvent_var e ( ctx->new_ColorChange_event ()); // update event attributes ctx->push_ColorChange (e.in ()); }
The context, which is auto-generated by the iCCM compiler, controls what concrete event type is created
![Page 23: Department of Computer and Information Sciences Indiana ...€¦ · The Data Distribution Services (DDS) is an OMG specification for creating real - time publisher-subscriber applications](https://reader034.vdocuments.net/reader034/viewer/2022042922/5f7d349977c70345e00d43b0/html5/thumbnails/23.jpg)
23
Deployment & configuration (D&C) is managed by DAnCE, which is an implementation of the OMG D&C specification
iCCM uses a variation of the DDS QoS Modeling Language (DQML) to model DDS entity QoS properties
![Page 24: Department of Computer and Information Sciences Indiana ...€¦ · The Data Distribution Services (DDS) is an OMG specification for creating real - time publisher-subscriber applications](https://reader034.vdocuments.net/reader034/viewer/2022042922/5f7d349977c70345e00d43b0/html5/thumbnails/24.jpg)
24
Deployment & configuration (D&C) is managed by DAnCE, which is an implementation of the OMG D&C specification
iCCM uses a variation of the DDS QoS Modeling Language (DQML) to model DDS entity QoS properties
Models are transformed into XML configuration files, and attached to its corresponding component implementation as a deployment & configuration property
![Page 25: Department of Computer and Information Sciences Indiana ...€¦ · The Data Distribution Services (DDS) is an OMG specification for creating real - time publisher-subscriber applications](https://reader034.vdocuments.net/reader034/viewer/2022042922/5f7d349977c70345e00d43b0/html5/thumbnails/25.jpg)
25
Top-level Attribute Name
Description Required Default
Name Name of the topic
Yes N/A
In the DDS configuration file:
Elements are used to capture the entity’s standard Qos parameters
Attributes on the top-level element are for configuration management
TopicQos
Top-level Attribute Name
Description Required Default
Name Name of the publisher Yes N/A
PublisherQos
Top-level Attribute Name
Description Required Default
Name Name of the
Yes N/A
SubscriberQos
![Page 26: Department of Computer and Information Sciences Indiana ...€¦ · The Data Distribution Services (DDS) is an OMG specification for creating real - time publisher-subscriber applications](https://reader034.vdocuments.net/reader034/viewer/2022042922/5f7d349977c70345e00d43b0/html5/thumbnails/26.jpg)
26
Top-level Attribute Name
Description Required Default
Name Target output port Yes N/A
Publisher Name of parent publisher No @default
Topic Name of topic No @default
IsInstance Register an event instance
No True
Scope Local, global, or custom No global
In the DDS configuration file:
Elements are used to capture the entity’s standard QoS parameters
Attributes on the top-level element are for configuration management
DataWriterQos
![Page 27: Department of Computer and Information Sciences Indiana ...€¦ · The Data Distribution Services (DDS) is an OMG specification for creating real - time publisher-subscriber applications](https://reader034.vdocuments.net/reader034/viewer/2022042922/5f7d349977c70345e00d43b0/html5/thumbnails/27.jpg)
27
Top-level Attribute Name
Description Required Default
Name Target input port Yes N/A
Subscriber Name of parent subscriber No @default
Topic Name of topic No @default
In the DDS configuration file:
Elements are used to capture the entity’s standard QoS parameters
Attributes on the top-level element are for configuration management
DataReaderQos
![Page 28: Department of Computer and Information Sciences Indiana ...€¦ · The Data Distribution Services (DDS) is an OMG specification for creating real - time publisher-subscriber applications](https://reader034.vdocuments.net/reader034/viewer/2022042922/5f7d349977c70345e00d43b0/html5/thumbnails/28.jpg)
28
DDSParticipantQoS
DDS Domain
![Page 29: Department of Computer and Information Sciences Indiana ...€¦ · The Data Distribution Services (DDS) is an OMG specification for creating real - time publisher-subscriber applications](https://reader034.vdocuments.net/reader034/viewer/2022042922/5f7d349977c70345e00d43b0/html5/thumbnails/29.jpg)
29
Domain Participant
Data Reader Data Writer
Subscriber configuring EventConsumer ports
Subscriber configuring emits/publishes ports
DDSParticipantQoS
![Page 30: Department of Computer and Information Sciences Indiana ...€¦ · The Data Distribution Services (DDS) is an OMG specification for creating real - time publisher-subscriber applications](https://reader034.vdocuments.net/reader034/viewer/2022042922/5f7d349977c70345e00d43b0/html5/thumbnails/30.jpg)
30
Connections validate QoS compatibility
DDSParticipantQoS
![Page 31: Department of Computer and Information Sciences Indiana ...€¦ · The Data Distribution Services (DDS) is an OMG specification for creating real - time publisher-subscriber applications](https://reader034.vdocuments.net/reader034/viewer/2022042922/5f7d349977c70345e00d43b0/html5/thumbnails/31.jpg)
31
DDSParticipantQoS
Declaration of XML file for configuring DDS entities
![Page 32: Department of Computer and Information Sciences Indiana ...€¦ · The Data Distribution Services (DDS) is an OMG specification for creating real - time publisher-subscriber applications](https://reader034.vdocuments.net/reader034/viewer/2022042922/5f7d349977c70345e00d43b0/html5/thumbnails/32.jpg)
32
iCCM provides a template framework that simplifies integrating DDS (and other architectures in CCM)
Servant
Servant_T <T>
Consumer Publisher PublisherTable
PublisherTable_T <EVENT> Publisher_T <EVENT> Consumer_T <EVENT>
Integration point for deployment tools (e.g., DAnCE)
![Page 33: Department of Computer and Information Sciences Indiana ...€¦ · The Data Distribution Services (DDS) is an OMG specification for creating real - time publisher-subscriber applications](https://reader034.vdocuments.net/reader034/viewer/2022042922/5f7d349977c70345e00d43b0/html5/thumbnails/33.jpg)
33
iCCM provides a template framework that simplifies integrating DDS (and other architectures in CCM)
Servant
Servant_T <T>
Consumer Publisher PublisherTable
PublisherTable_T <EVENT> Publisher_T <EVENT> Consumer_T <EVENT>
Implements default CCM methods for a servant
![Page 34: Department of Computer and Information Sciences Indiana ...€¦ · The Data Distribution Services (DDS) is an OMG specification for creating real - time publisher-subscriber applications](https://reader034.vdocuments.net/reader034/viewer/2022042922/5f7d349977c70345e00d43b0/html5/thumbnails/34.jpg)
34
iCCM provides a template framework that simplifies integrating DDS (and other architectures in CCM)
Servant
Servant_T <T>
Consumer Publisher PublisherTable
PublisherTable_T <EVENT> Publisher_T <EVENT> Consumer_T <EVENT>
Common implementation for arch-specific ports
![Page 35: Department of Computer and Information Sciences Indiana ...€¦ · The Data Distribution Services (DDS) is an OMG specification for creating real - time publisher-subscriber applications](https://reader034.vdocuments.net/reader034/viewer/2022042922/5f7d349977c70345e00d43b0/html5/thumbnails/35.jpg)
35
iCCM provides a template framework that simplifies integrating DDS (and other architectures in CCM)
Servant
Servant_T <T>
Consumer Publisher PublisherTable
PublisherTable_T <EVENT> Publisher_T <EVENT> Consumer_T <EVENT>
Event type specific implementation
![Page 36: Department of Computer and Information Sciences Indiana ...€¦ · The Data Distribution Services (DDS) is an OMG specification for creating real - time publisher-subscriber applications](https://reader034.vdocuments.net/reader034/viewer/2022042922/5f7d349977c70345e00d43b0/html5/thumbnails/36.jpg)
Lessons Learned
Initial observations show iCCM is a less complex solution compared to DDS4CCM
iCCM makes it easier to swap component implementations with different communication architectures
Must use the iCCM variation of the context
36
Component Implementation
OpenSplice Servant
RTI-DDS Servant
OpenDDS Servant
CoreDX Servant
Foo Servant
Bar Servant
use/manage
![Page 37: Department of Computer and Information Sciences Indiana ...€¦ · The Data Distribution Services (DDS) is an OMG specification for creating real - time publisher-subscriber applications](https://reader034.vdocuments.net/reader034/viewer/2022042922/5f7d349977c70345e00d43b0/html5/thumbnails/37.jpg)
Lessons Learned
Initial observations show iCCM is a less complex solution compared to DDS4CCM
iCCM makes it easier to swap component implementations with different communication architectures
Must use the iCCM variation of the context
Improve event mapping for keys
Keys map to private fields
configure keys at deployment 37
// DDS event struct ShapeType { string color; //@key long x; long y; long shapesize; };
// CCM event eventtype ShapeEvent { private string color; public long x; public long y; public long shapesize; };
![Page 38: Department of Computer and Information Sciences Indiana ...€¦ · The Data Distribution Services (DDS) is an OMG specification for creating real - time publisher-subscriber applications](https://reader034.vdocuments.net/reader034/viewer/2022042922/5f7d349977c70345e00d43b0/html5/thumbnails/38.jpg)
38
iCCM is available in open-source format from the following location: http://cuts.cs.iupui.edu
Future Research Directions
Integration non-OMG architectures & technologies to improve portability
Portico (prototyped)
TRON/UPPAAL (prototyped)
OpenJAUS
SOAP/JSON
Integration of heterogeneous architectures
OpenSplice
RTI-DDS JSON
![Page 39: Department of Computer and Information Sciences Indiana ...€¦ · The Data Distribution Services (DDS) is an OMG specification for creating real - time publisher-subscriber applications](https://reader034.vdocuments.net/reader034/viewer/2022042922/5f7d349977c70345e00d43b0/html5/thumbnails/39.jpg)