Understanding nodes and topics¶
The communication in Ignition Transport follows a pure distributed architecture, where there is no central process, broker or similar. All the nodes in the network can act as publishers, subscribers, provide services and request services.
A publisher is a node that produces information and a subscriber is a node that consumes information. There are two categories or ways to communicate in Ignition Transport. First, we could use a publish/subscribe approach, where a node advertises a topic, and then, publishes periodic updates. On the other side, one or more nodes subscribe to the same topic registering a function that will be executed each time a new message is received. An alternative communication paradigm is based on service calls. A service call is a remote service that a node offers to the rest of the nodes. A node can request a service in a similar way a local function is executed.
A topic is just a name for grouping a specific set of messages or a particular
service. Imagine that you have a camera and want to periodically publish its
images. Your node could advertise a topic called
/image, and then, publish a
new message on this topic every time a new image is available. Other nodes, will
subscribe to the same topic and will receive the messages containing the image.
A node could also offer an echo service in the topic
/echo. Any node
interested in this service will request a service call on topic
service call will accept arguments and will return a result. In our echo
service example, the result will be similar to the input parameter passed to the
There are some rules to follow when selecting a topic name. It should be any
alphanumeric name followed by zero or more slashes. For example:
/robot1/joints/HeadPitch are examples of valid topic
names. The next table summarizes the allowed and not allowed topic rules.
|/topicA/||Valid||Equivalent to /topicA|
|Invalid||Empty string is invalid|
|my topic||Invalid||Contains white space|
|//image||Invalid||Contains two consecutive
A topic can be optionally advertised with a scope. A scope allows you to set the
visibility of this topic. The available scopes are
Process scope means that the advertised topic will only be
visible in the nodes within the same process as the advertiser. A topic with a
Host scope restricts the visibility of a topic to nodes located in the same
machine as the advertiser. Finally, by specifying a scope with an
you’re allowing your topic to be visible by any node.
Partition and namespaces¶
When you create your node you can specify some options to customize its behavior. Among those options you can set a partition name and a namespace.
A partition is used to isolate a set of topics or services within a group of
nodes that share the same partition name. E.g.: Node1 advertises topic
and Node2 advertises
/foo too. If we don’t use a partition, a node
/foo will receive the messages published from Node1 and Node2.
Alternatively, we could specify
p1 as a partition for Node1 and
p2 as a
partition for Node2. When we create the node for our subscriber, if we specify
p1 as a partition name, we’ll receive the messages published only by Node1.
If we use
p2, we’ll only receive the messages published by Node2. If we
don’t set a partition name, we won’t receive any messages from Node1 or Node2.
A partition name is any alphanumeric string with a few exceptions.
/ is allowed as part of a partition name but just
not allowed. The symbols
~ or white spaces are not allowed as
part of a partition name. Two or more consecutive slashes (
//) are not
The default partition name is created using a combination of your hostname,
: and your username. E.g.:
bb8:caguero . It’s also possible
to use the environment variable
IGN_PARTITION for setting a custom partition
A namespace is considered a prefix that might be potentially applied to some of the topic/services advertised in a node.
E.g.: Node1 sets a namespace
ns1 and advertises the topics
/t3 is considered an absolute topic (starts
/) and it won’t be affected by a namespace. However,
t2 will be advertised as
A namespace is any alphanumeric string with a few exceptions.
/ is allowed as part of a namespace but just
/ is not
allowed. The symbols
~ or white spaces are not allowed as
part of a namespace. Two or more consecutive slashes (
//) are not allowed.
If topic name or namespace is invalid than fully qualified topic name is
|Namespace||Topic name||Fully qualified topic||Validity||Comment|
|ns1||topic A||Invalid||Topic contains white space|
|topic A||Invalid||Topic contains white space|
|my ns||topicA||Invalid||Namespace contains white space|
|//ns||topicA||Invalid||Namespace contains two consecutive