Unlike other middlewares, e.g. DDS used in ROS 2, iceoryx keeps things simple and offers basic Quality of Service (QoS) settings. The QoS settings are called options and can be used to optimize and tailor the communication.
The two most important settings are:
||This enables servers to store n requests at the users side|
||This enables clients to store n responses at the users side|
QueueFullPolicy are used to control the behavior for full queues. Since some
combinations would be contradicting, not all of them match to connect producer and consumer.
||Producer blocks and waits for consumers|
||Not compatible, no connection established|
Server and client matching criteria🔗
Two criteria have to be fulfilled in order for a server and a client to be connected.
The three most important settings are:
||This enables late-joining subscribers to request the n last samples|
||Size of the subscriber queue where samples are stored at the user side|
||The number of samples a late-joining subscriber will request from every offered publisher, should be equal or smaller than
In case of n:m communication, the history feature will not provide the overall last n samples based on delivery point in time!
The following two scenarios are examples of issues when using n:m together with the history feature:
Multiple publishers The last n samples of every publisher are received. This means for m publishers in the worst case m * n samples in random order, not in the order they were published on the topic.
Multiple publishers after the publisher called
stopOffer()or is removed The last n samples will never be received since they vanished. An arbitrary number of samples or nothing is received.
For more information about the options see the corresponding example
PublisherOptions::historyCapacity is larger than
SubscriberOptions::queueCapacity and blocking behaviour
is active, late-joining subscribers will not receive the latest and greatest sample, effectively loosing some.
Publisher and subscriber matching criteria🔗
requiresPublisherHistorySupport is set, additionally to the matching criteria of server and client, there is a third one for publishers and subscribers: