6.6. Intra-process delivery¶
eProsima Fast DDS allows to speed up communications between entities within the same process by avoiding any of the overhead involved in the transport layer. Instead, the Publisher directly calls the reception functions of the Subscriber. This not only avoids the copy or send operations of the transport, but also ensures the message is received by the Subscriber, avoiding the acknowledgement mechanism.
This feature is enabled by default, and can be configured using XML profiles. Currently the following options are available:
INTRAPROCESS_OFF: The feature is disabled.
INTRAPROCESS_USER_DATA_ONLY: Discovery metadata keeps using ordinary transport.
INTRAPROCESS_FULL: Default value. Both user data and discovery metadata using Intra-process delivery.
XML |
<library_settings>
<intraprocess_delivery>FULL</intraprocess_delivery> <!-- OFF | USER_DATA_ONLY | FULL -->
</library_settings>
|
6.6.1. GUID Prefix considerations for intra-process delivery¶
Fast DDS utilizes the DomainParticipant’s GuidPrefix_t
to identify peers running in the same process.
Two participants with identical 8 first bytes on the GuidPrefix_t
are considered to be running in the same
process, and therefore intra-process delivery is used.
This mechanism works out-of-the-box when letting Fast DDS set the GUID prefixes for the created DomainParticipants.
However, special consideration is required when setting the GuidPrefix_t
manually, either programmatically or when
using XML
C++ - Option 1: Manual setting of the |
eprosima::fastrtps::rtps::GuidPrefix_t guid_prefix;
guid_prefix.value[0] = eprosima::fastrtps::rtps::octet(0x77);
guid_prefix.value[1] = eprosima::fastrtps::rtps::octet(0x73);
guid_prefix.value[2] = eprosima::fastrtps::rtps::octet(0x71);
guid_prefix.value[3] = eprosima::fastrtps::rtps::octet(0x85);
guid_prefix.value[4] = eprosima::fastrtps::rtps::octet(0x69);
guid_prefix.value[5] = eprosima::fastrtps::rtps::octet(0x76);
guid_prefix.value[6] = eprosima::fastrtps::rtps::octet(0x95);
guid_prefix.value[7] = eprosima::fastrtps::rtps::octet(0x66);
guid_prefix.value[8] = eprosima::fastrtps::rtps::octet(0x65);
guid_prefix.value[9] = eprosima::fastrtps::rtps::octet(0x82);
guid_prefix.value[10] = eprosima::fastrtps::rtps::octet(0x82);
guid_prefix.value[11] = eprosima::fastrtps::rtps::octet(0x79);
DomainParticipantQos participant_qos;
participant_qos.wire_protocol().prefix = guid_prefix;
|
C++ - Option 2: Using the |
DomainParticipantQos participant_qos;
std::istringstream("77.73.71.85.69.76.95.66.65.82.82.79") >> participant_qos.wire_protocol().prefix;
|
XML |
<?xml version="1.0" encoding="UTF-8" ?>
<profiles xmlns="http://www.eprosima.com/XMLSchemas/fastRTPS_Profiles">
<participant profile_name="participant_guidprefix" >
<rtps>
<prefix>
77.73.71.85.69.76.95.66.65.82.82.79
</prefix>
</rtps>
</participant>
</profiles>
|